SpringCloud | config(3)-借助Bus实现动态刷新

384 阅读2分钟

环境

SpringCloud:Finchley.RELEASE

SpringBoot:2.0.0.RELEASE

JDK:1.8

1. 通过Spring Cloud Bus实现动态刷新

在微服务架构中,通常会使用轻量级的消息代理来构建一个公用的消息主题来连接各个微服务实例,它广播的消息会被所以在注册中心中注册的服务监听和消费,也成为消息总线。

Spring Cloud Bus将分布式的节点用轻量的消息代理连接起来,搭建消息总线,配置Spring Cloud Config实现应用服务的配置动态刷新。

2. 消息总线整合配置中心

2.1 环境准备

  1. 通过docker安装RabbitMQ
dokcer pull registry.cn-beijing.aliyuncs.com/buyimoutianxia/rabbitmq:V3.7.25

docker run -it -d --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin  \
registry.cn-beijing.aliyuncs.com/buyimoutianxia/rabbitmq:V3.7.25

2.2 Config Server改造

  1. 添加依赖

            <!--bus 依赖-->
            <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>
    
  2. 修改配置,增加rabbit连接信息和actuator暴露点

    server:
      port: 5001
    spring:
      application:
        name: microserver-config
      cloud:
        config:
          server:
            git:
              uri: https://github.com/buyimoutianxia/microservicerconfig.git
      rabbitmq:  #rabbitmq配置
        host: localhost
        port: 5672
        username: admin
        password: admin
    
    #actuator暴露点
    management:
      endpoint:
      endpoints:
        web:
          exposure:
            include: "bus-refresh"
    

2.3 Config Client改造

  1. 增加依赖

            <!--bus依赖-->
            <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>
    
  2. 修改配置,增加rabbit信息,删除refresh暴露点,采用server的暴露点刷新

    spring:
      cloud:
        config:
          name: application   #从github上获取的资源名称,没有yml后缀
          profile: test #访问的配置项
          label: master  #访问的分支
          discovery: # 开启通过微服务名称获取Config Server的信息
            enabled: true
            service-id: microserver-config
    #      uri: http://localhost:5001   #SpringCloud Config Server端的地址
      rabbitmq:
        host: localhost
        port: 5672
        username: admin
        password: admin
        
    #开启actuator的refresh点
    #management:
    #  endpoint:
    #  endpoints:
    #    web:
    #      exposure:
    #        include: ["refresh","info"]
    

2.4 动态刷新

在server端发送post请求http://localhost:5001//actuator/bus-refresh

2.5 定点刷新

只刷新指定的服务方式:发送post请求到http://${config server ip-address}:5001/actuator/bus-refresh/${config client serviceId}:${server:port},比如http://localhost:5001/actuator/bus-refresh/microservice-consumer:9001

代码示例-github