woshikid / blog

Apache License 2.0
8 stars 1 forks source link

Spring Cloud Zookeeper学习笔记 #183

Open woshikid opened 2 years ago

woshikid commented 2 years ago

注册中心

POM

<!-- 默认已包含Spring Cloud LoadBalancer -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>

自定义配置

spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181 # Zookeeper地址(默认值)
      discovery:
        root: /services # 默认注册到/services
        instance-host: ${spring.cloud.client.ip-address} # 使用IP而不是hostname
        #instance-ssl-port: ${server.port} # 注册为https服务

使用DiscoveryClient

@Autowired
private DiscoveryClient discoveryClient;

List<ServiceInstance> serviceInstances = discoveryClient.getInstances(springApplicationName);
String url = serviceInstances.get(0).getUri().toString();

配置中心

POM

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-config</artifactId>
</dependency>

创建配置信息(zkCli)

create /config
create /config/test
# 多层目录形式,info.app.name=testApp
create /config/test/info
create /config/test/info/app
create /config/test/info/app/name "testApp"
# 单层目录形式,优先级低于多层目录形式
create /config/test/info.app.name "testApp"
# profile配置
create /config/test,dev
create /config/test,dev/info.app.name "testApp"
# 全局配置
create /config/application
create /config/application/info.app.name "testApp"

使用import的方式启动

自定义配置

spring:
  config:
    import: "optional:zookeeper:localhost:2181"
    #import: "optional:zookeeper:" # 使用spring.cloud.zookeeper.connect-string
    #import: "optional:zookeeper:localhost:2181/path/to/test;/path/to/test-dev" # 仅从指定路径获取配置(路径不支持逗号)
  cloud:
    zookeeper:
      #connect-string: localhost:2181 # 优先级低于spring.config.import
      config:
        root: config # 默认配置路径为/config
        name: test # 默认为spring.application.name
        default-context: application # 全局配置名,默认为application
        profile-separator: "," # profile分隔符(默认值)

配置优先级 路径优先级与classpath:/同级

1. zookeeper:config/{springApplicationName},{profile}
2. zookeeper:config/application,{profile} # 全局配置
3. classpath:/application-{profile}.yml
4. zookeeper:config/{springApplicationName}
5. zookeeper:config/application # 全局配置
6. classpath:/application.yml

使用bootstrap的方式启动

-Dspring.cloud.bootstrap.enabled=true

或引入POM

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

自定义配置(bootstrap.yml)

spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181 # 默认为localhost:2181
      config:
        fail-fast: true # 相当于去掉import的optional,默认为true
        name: test # 或将spring.application.name定义在bootstrap.yml中

配置优先级 高于所有配置,甚至高于测试参数

1. zookeeper:config/{springApplicationName},{profile}
2. zookeeper:config/{springApplicationName}
3. zookeeper:config/application,{profile} # 全局配置
4. zookeeper:config/application # 全局配置

刷新配置

当Zookeeper中的配置信息变更时将自动刷新配置

手动刷新

curl -X POST http://localhost:8080/actuator/refresh

标记bean需要重新加载配置

@RefreshScope