关于java:Bus消息总线

649次阅读

共计 2414 个字符,预计需要花费 7 分钟才能阅读完成。

Bus 音讯总线

什么是音讯总线

音讯代理中间件构建一个共用的音讯主题让所有微服务实例订阅,当该音讯主题产生音讯时会被所有微服务实例监听和生产。

音讯代理又是什么?音讯代理是一个音讯验证、传输、路由的架构模式,次要用来实现接管和散发音讯,并依据设定好的音讯解决流来转发给正确的利用。它在微服务之间起到通信调度作用,缩小了服务之间的依赖。

什么是 Spring Cloud Bus

Spring Cloud Bus 是 Spring Cloud 体系内的音讯总线,用来连贯分布式系统的所有节点。

Spring Cloud Bus 将分布式的节点用轻量的音讯代理(RibbitMQ、Kafka)连接起来。能够通过音讯代理播送配置文件的更改,或服务之间的通信,也能够用于监控。解决了微服务数据变更,及时同步的问题。

官网文档:https://cloud.spring.io/sprin…


什么时候应用 Spring Cloud Bus

微服务个别都采纳集群形式部署,而且在高并发下常常须要对服务进行扩容、缩容、上线、下线的操作。比方咱们须要更新配置,又或者须要同时生效所有服务器上的某个缓存,须要向所有相干的服务器发送命令,此时就能够抉择应用 Spring Cloud Bus 了。

总的来说,就是在咱们须要把一个操作散发到所有后端相干服务器的时候,就能够抉择应用 Spring Cloud Bus 了。

接下来咱们通过 Spring Cloud Bus 实现微服务架构的配置刷新。

环境筹备

RibbitMQ v3.8.2 地址:192.168.10.101

bus-demo 聚合工程 SpringBoot 2.2.4.RELEASESpring Cloud Hoxton.SR1

  • eureka-server:注册核心
  • eureka-server02:注册核心
  • config-server:配置核心服务端
  • config-server02:配置核心服务端
  • order-service:订单服务(配置核心客户端)
  • order-service02:订单服务(配置核心客户端)

配置文件 order-service-prod.yml

spring:
  application:
    name: order-service # 利用名称

# 配置 Eureka Server 注册核心
eureka:
  instance:
    prefer-ip-address: true       # 是否应用 ip 地址注册
    instance-id: ${spring.cloud.client.ip-address}:${server.port} # ip:port
  client:
    service-url:                  # 设置服务注册核心地址
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/

# 自定义配置
name: order-service-prod
password: root

Spring Cloud Bus 实现配置刷新

客户端发动告诉

音讯总线(Bus)的典型利用场景就是配置核心客户端刷新。

咱们在学习 Spring Cloud Config 配置核心时给大家讲了基于 Actuator 的配置刷新,过后的案例只有一个 Config Client,咱们能够应用 Webhook,设置手动刷新都不算太麻烦,然而如果客户端比拟多的状况下,一个一个去手动刷新未免有点简单,这种计划就不太适宜了。应用 Spring Cloud Bus 能够完满解决这一问题。

借助 Spring Cloud Bus 的播送性能,让 Config Client 都订阅配置更新事件,当配置更新时,触发其中一个端的更新事件,Spring Cloud Bus 就把此事件播送到其余订阅客户端,以此来达到批量更新。

  1. Webhook 监听被触发,给 ConfigClient A 发送 bus-refresh 申请刷新配置
  2. ConfigClient A 读取 ConfigServer 中的配置,并且发送音讯给 Bus
  3. Bus 接管音讯后播送告诉其余 ConfigClient
  4. 其余 ConfigClient 收到音讯从新读取最新配置

增加依赖

Config Client 增加 spring cloud starter bus amqp 依赖。

<!-- spring cloud starter bus amqp 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

配置文件

配置文件须要配置 音讯队列 bus-refresh 主动刷新端点。/actuator/bus-refresh 端点会革除 @RefreshScope 缓存从新绑定属性。

Config Client 的 bootstrap.yml 外围配置。

spring:
  cloud:
    config:
      name: order-service # 配置文件名称,对应 git 仓库中配置文件前半部分
      label: master # git 分支
      profile: prod # 指定环境
      discovery:
        enabled: true # 开启
        service-id: config-server # 指定配置核心服务端的 service-id
  # 音讯队列
  rabbitmq:
    host: 192.168.10.101
    port: 5672
    username: guest
    password: guest
    virtual-host: /

# 度量指标监控与健康检查
management:
  endpoints:
    web:
      base-path: /actuator    # 拜访端点根门路,默认为 /actuator
      exposure:
        include: bus-refresh  # 须要开启的端点
        #exclude:             # 不须要开启的端点 

正文完
 0