Spring Cloud Bus消息总线

什么是springcloud bus?

Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。Spring Clud Bus目前支持RabbitMQ和Kafka。Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新。

什么是总线

在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。

基本原理

ConfigClient实例都监听MQ中同一个topic(默认是springCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置。

先具备良好的RabbitMQ环境

SpringCloud Bus动态刷新全局广播

  1. 在父工程下新建cloud-config-client-3366

  2. 新建完成后添加pom依赖坐标

     
            
                org.springframework.cloud
                spring-cloud-starter-config
            
            
                org.springframework.cloud
                spring-cloud-starter-netflix-eureka-client
            
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.springframework.boot
                spring-boot-starter-actuator
            
    ​
            
                org.springframework.boot
                spring-boot-devtools
                runtime
                true
            
            
                org.projectlombok
                lombok
                true
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
        

  3. 新建bootstrap.yml文件

     
    server:
      port: 3366
    ​
    spring:
      application:
        name: config-client
      cloud:
        #Config客户端配置
        config:
          label: master #分支名称
          name: config #配置文件名称
          profile: dev #读取后缀名称   上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
          uri: http://localhost:3344 #配置中心地址
    ​
    #服务注册到eureka地址
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:7001/eureka
    ​
    # 暴露监控端点
    management:
      endpoints:
        web:
          exposure:
            include: "*"
     
    ​

  4. 创建主启动类

    @EnableEurekaClient
    @SpringBootApplication
    public class ConfigClientMain3366
    {
        public static void main(String[] args)
        {
            SpringApplication.run(ConfigClientMain3366.class,args);
        }
    }

  5. 创建 controller

    @RestController
    @RefreshScope
    public class ConfigClientController
    {
        @Value("${server.port}")
        private String serverPort;
    ​
        @Value("${config.info}")
        private String configInfo;
    ​
        @GetMapping("/configInfo")
        public String configInfo()
        {
            return "serverPort: "+serverPort+"\t\n\n configInfo: "+configInfo;
        }
    ​
    }

  6. 修改3344添加消息总线支持

    1. 修改pom文件

    
        org.springframework.cloud
        spring-cloud-starter-bus-amqp
    
    
        org.springframework.boot
        spring-boot-starter-actuator
    
    1. 添加rabbitMQ的支持

      server:
        port: 3344
      ​
      spring:
        application:
          name:  cloud-config-center #注册进Eureka服务器的微服务名
        cloud:
          config:
            server:
              git:
                uri: [email protected]:zzyybs/springcloud-config.git #GitHub上面的git仓库名字
              ####搜索目录
                search-paths:
                  - springcloud-config
            ####读取分支
            label: master
      #rabbitmq相关配置
      rabbitmq:
          host: localhost
          port: 5672
          username: guest
          password: guest
      ​
      #服务注册到eureka地址
      eureka:
        client:
          service-url:
            defaultZone: http://localhost:7001/eureka
      ​
      ​
      ​
      ##rabbitmq相关配置,暴露bus刷新配置的端点
      management:
        endpoints: #暴露bus刷新配置的端点
          web:
            exposure:
              include: 'bus-refresh'

  7. 修改3355添加消息总线支持

    1. 修改pom文件

    
        org.springframework.cloud
        spring-cloud-starter-bus-amqp
    
    
        org.springframework.boot
        spring-boot-starter-actuator
    
    1. 添加rabbitMQ的支持

      server:
        port: 3355
      ​
      spring:
        application:
          name: config-client
        cloud:
          #Config客户端配置
          config:
            label: master #分支名称
            name: config #配置文件名称
            profile: dev #读取后缀名称   上述3个综合:master分支上config-dev.yml的配置文件被读取
            uri: http://localhost:3344 #配置中心地址k
      #rabbitmq相关配置 15672是Web管理界面的端口;5672是MQ访问的端口
        rabbitmq:
          host: localhost
          port: 5672
          username: guest
          password: guest
      ​
      #服务注册到eureka地址
      eureka:
        client:
          service-url:
            defaultZone: http://localhost:7001/eureka
      # 暴露监控端点
      management:
        endpoints:
          web:
            exposure:
              include: "*"   # 'refresh'
      ​
      ​

  8. 修改3366添加消息总线支持

    1. 修改pom文件

     
    
    
        org.springframework.cloud
        spring-cloud-starter-bus-amqp
    
    
        org.springframework.boot
        spring-boot-starter-actuator
    
    1. 添加rabbitMQ的支持

      server:
        port: 3366
      ​
      spring:
        application:
          name: config-client
        cloud:
          #Config客户端配置
          config:
            label: master #分支名称
            name: config #配置文件名称
            profile: dev #读取后缀名称   上述3个综合:master分支上config-dev.yml的配置文件被读取
            uri: http://localhost:3344 #配置中心地址k
      #rabbitmq相关配置 15672是Web管理界面的端口;5672是MQ访问的端口
        rabbitmq:
          host: localhost
          port: 5672
          username: guest
          password: guest
      ​
      #服务注册到eureka地址
      eureka:
        client:
          service-url:
            defaultZone: http://localhost:7001/eureka
      # 暴露监控端点
      management:
        endpoints:
          web:
            exposure:
              include: "*"   # 'refresh'
      ​

  9. 发送POST请求 curl -X POST "http://localhost:3344/actuator/bus-refresh" 一次请求处处刷新

SpringCloud Bus动态刷新定点通知

/bus/refresh请求不再发送到具体的服务实例上,而是发给config server并通过destination参数类指定需要更新配置的服务或实例

我们这里以刷新运行在3355端口上的config-client为例,只通知3355,不通知3366

curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"

你可能感兴趣的:(springcloud,微服务)