springcloud使用(五) 配置自动重连和bus总线

2018-12-07  本文已影响13人  朝生夕丧

来看看多个config-server是如何实现失败快速响应和自动重连的和多个client之间是如何做到刷新配置的

自动重连

先将config-server和config-client注册到eureka服务注册中心

  1. client配置文件中添加以下配置
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=spring-cloud-config-server
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
  1. client启动类添加@EnableDiscoveryClient注解
  2. server配置文件添加以下配置
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
  1. server启动类添加@EnableDiscoveryClient注解
  2. 启动服务注册中心eureka-register, config-server, config-client即可


    服务注册中心的config-server和config-client

在client中添加自动重连配置, 非常简单

  1. 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>
  1. 测试
    启动server和client, 正常访问. 然后关闭server, 修改git中的配置文件, 访问/configData发现配置值并没有发生变化, 因为连接server失败了; 重新启动server, 修改git中的配置文件, 访问/configData, 发现值有变化, 说明自动重连实现成功
bus总线

启动多个client的情况下, webhook只会通知一个client的/refresh刷新配置, 但其余的client还是以前的数据, 要想其他client也刷新配置就得一个个去手动请求/refresh, 这个操作乏味无聊不说还可能会出现遗漏, bus就帮我们完成了这项工作.


bus通知其他client刷新配置

这时Spring Cloud Bus做配置更新步骤如下:

1、提交代码触发post请求给bus/refresh
2、server端接收到请求并发送给Spring Cloud Bus
3、Spring Cloud bus接到消息并通知给其它客户端
4、其它客户端接收到通知,请求Server端获取最新配置
5、全部客户端均获取到最新的配置
这样的话我们在server端的代码做一些改动,来支持bus/refresh

我们只需要在client端做些处理

  1. 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>
  1. 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

  1. 测试
    启动三个client, 修改git上配置文件的value, 依次访问三个client不同端口的获取配置的请求,如localhost:8891/configData, 发现修改的配置value都有刷新过来,案例算是完成
    rabbitmq消息管理多了bus的exchange
    over
上一篇 下一篇

猜你喜欢

热点阅读