消息总线 - bus

一、Spring Cloud Bus简介

Spring Cloud Bus集成了市面上常见的RabbitMQ和Kafka等消息代理。其会连接微服务系统中所有拥有Bus总线机制的节点,当有数据变更的时候,会通过消息中间件使用消息广播的方式通知所有的微服务节点同步更新数据。(如:微服务配置更新等)

  1. 实现Bus刷新功能需要在所有的config client端应用中增加spring-cloud-starter-bus-amqp依赖,这个依赖是消息总线集成的RabbitMQ消息同步组件


    org.springframework.cloud
    spring-cloud-starter-bus-amqp

  1. 在config client端的bootstrap配置文件中增加RabbitMQ相关配置
spring.rabbitmq.host=192.168.1.122
spring.rabbitmq.port=5672
spring.rabbitmq.username=test
spring.rabbitmq.password=123456
  1. Bus消息总线会提供一个/bus/refresh服务来实现应用的热刷新。不再使用actuator来提供人刷新逻辑。/bus/refresh服务要求请求必须是post请求,可用任意技术实现。
    这里要注意,虽然刷新服务的逻辑由Bus消息总线来提供,但是/bus/refresh服务默认还是关闭的,需要开启,在config client端的bootstrap配置文件中必须配置下述内容
management.security.enabled=true

二、基于config-server实现全局刷新

消息总线 - bus_第1张图片

这种实现方案在设计上更加完美,将热刷新逻辑和具体的服务应用解耦。推荐使用。
需要在config server和config client端都引入Bus消息总线组件

三、局部刷新

使用Bus总线也可以实现部分服务热刷新。前文讲到的两种刷新实现方式都是全局热刷新,所有带有Bus消息总线组件且与同一个RabbitMQ连接的微服务应用都会执行热刷新逻辑。有些时候,热刷新只需要在一个微服务应用或一个微服务应用集群中执行,这个时候就需要使用局部刷新功能。
局部热刷新的实现过程和全局热刷新一致,只是请求地址/bus/refresh需要提供一个GET请求参数,请求参数命名为destination,参数值是要刷新的微服务名称:端口[]。
如:
微服务名: config-client
微服务端口: 10802、10803、10804
如果只热刷新微服务config-client:10802时,请求的路径为/bus/refresh?destination=config-client:10802。
如果需要刷新config-client微服务集群,则请求路径为/bus/refresh?destination=config-client:

你可能感兴趣的:(SpringCloud,-,教学)