zoukankan      html  css  js  c++  java
  • spring cloud bus 消息总线

    spring cloud bus 消息总线

    spring cloud 学习完整代码:https://github.com/Zzwenm/spring-cloud-config

    对于spring cloud config 而言,避免了每次更新配置都要重启客户端微服务。

    但是当每个整个系统的微服务变多时,每个微服务都要执行一次post请求,这样的手动刷新很是繁琐。

    这里希望可以进行广播,达到一次通知,所有的微服务都生效,并且该更新的微服务进行更新,不需要更新的微服务不进行更新,实现差异化的管理。

    可以通过对spring cloud config加强达到广播形的自动版的动态刷新,
    使用spring cloud bus 配合 spring cloud config 实现配置的动态刷新。

    官网:https://cloud.spring.io/spring-cloud-bus/1.3.x/single/spring-cloud-bus.html

    spring cloud bus 是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。

    bus目前支持两种消息代理:RabbitMQ 、 Kafka。

    一、什么是总线

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

    二、基本原理

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

    三、RabbitMQ环境配置

    参考 https://blog.csdn.net/zhm3023/article/details/82217222

    四、Spring Cloud Bus动态刷新全局广播

    利用消息总线触发服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置。

    4.1、ConfigServer配置中心添加消息总线支持。

    4.1.1、导入依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>
    

    4.1.2、修改配置

    添加mq的相关配置

    #rabbitmq相关配置
    spring:
        rabbitmq:
          host: localhost
          port: 5672
          username: guest
          password: guest
    #rabbitmq相关配置
    management:
      endpoints: #暴露bus刷新配置的端点
        web:
          exposure:
            include: 'bus-refresh'
    

    4.2、客户端添加总线支持

    4.2.1、导入依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>
    

    4.2.2、添加配置文件

    #rabbitmq相关配置
    spring:
        rabbitmq:
          host: localhost
          port: 5672
          username: guest
          password: guest
    

    4.2.3、Controller修改:

    头部添加@RefreshScope
    使其具备刷新功能
    

    4.3、启动

    依次启动eureka-server、config-server、eureka-client、eureka-consumer

    4.4、测试

    要确保每个客户端能否正常的通过ConfigServer获取到配置文件

    4.4.1、运维工程师修改Github上配置文件增加版本号

    github version

    4.4.2、发送POST请求

    发送请求无需向客户端发送请求,只需要向服务端发送一处请求即可。

    cmd命令行操作,发送到config-server处
    curl -X POST "http://localhost:3344/actuator/bus-refresh"
    

    curl

    4.4.3、再次访问ConfigServer查看结果

    config-server:

    eureka-client:

    eureka-consumer:

    客户端的配置也都已经更新了,达到了一次发送,处处生效。

    五、定点刷新

    当我们只想刷新某个需要更新的配置时可以使用定点数新。

    例如:
    只想更新eureka-client,不想更新eureka-consumer。

    公式:

    http://localhost:{配置中心端口号}/actuator/bus-refresh/{destination}
    

    只更新eureka-client:

    curl -X POST "http://localhost:3344/actuator/bus-refresh/eureka-client:8762"
    eureka-client 为配置文件中设定的spring.application.name
    8762 为端口号
    

    spring cloud 学习完整代码:https://github.com/Zzwenm/spring-cloud-config

  • 相关阅读:
    160922、配置:spring通过profile或@profile配置不同的环境(测试、开发、生产)
    160921、React入门教程第一课--从零开始构建项目
    160920、springmvc上传图片不生成临时文件
    160919、使用AOP与注解记录Java日志
    160918、BigDecimal运算
    160914、ionic指令简单布局
    Oracle 修改文件所有者
    Oracle 新增删除账户
    Oralce 账户被锁后的解决办法
    Linux Oracle 转换编码格式
  • 原文地址:https://www.cnblogs.com/Zzwena/p/12542527.html
Copyright © 2011-2022 走看看