来看看多个config-server是如何实现失败快速响应和自动重连的和多个client之间是如何做到刷新配置的
自动重连
先将config-server和config-client注册到eureka服务注册中心
- client配置文件中添加以下配置
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=spring-cloud-config-server
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
- client启动类添加@EnableDiscoveryClient注解
- server配置文件添加以下配置
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
- server启动类添加@EnableDiscoveryClient注解
-
启动服务注册中心eureka-register, config-server, config-client即可
在client中添加自动重连配置, 非常简单
- pom文件添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
- 测试
启动server和client, 正常访问. 然后关闭server, 修改git中的配置文件, 访问/configData发现配置值并没有发生变化, 因为连接server失败了; 重新启动server, 修改git中的配置文件, 访问/configData, 发现值有变化, 说明自动重连实现成功
bus总线
启动多个client的情况下, webhook只会通知一个client的/refresh刷新配置, 但其余的client还是以前的数据, 要想其他client也刷新配置就得一个个去手动请求/refresh, 这个操作乏味无聊不说还可能会出现遗漏, bus就帮我们完成了这项工作.
这时Spring Cloud Bus做配置更新步骤如下:
1、提交代码触发post请求给bus/refresh
2、server端接收到请求并发送给Spring Cloud Bus
3、Spring Cloud bus接到消息并通知给其它客户端
4、其它客户端接收到通知,请求Server端获取最新配置
5、全部客户端均获取到最新的配置
这样的话我们在server端的代码做一些改动,来支持bus/refresh
我们只需要在client端做些处理
- pom添加依赖
<!-- 消息总线 一个client刷新后rabbitmq通知多个client刷新配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
- propoties配置文件添加
# rabbitmq
spring.rabbitmq.host=192.168.1.8
spring.rabbitmq.port=5672
spring.rabbitmq.username=rabbitadmin
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=dev
还要将management.endpoints.web.exposure.include=refresh 的值改成bus-refresh
- 测试
启动三个client, 修改git上配置文件的value, 依次访问三个client不同端口的获取配置的请求,如localhost:8891/configData, 发现修改的配置value都有刷新过来,案例算是完成
over