八. SpringCloud消息总线 (2)

在其POM文件中添加RabbitMQ实现总线的依赖(同ConfigServer的相关依赖):

<!--添加消息总线RabbitMQ支持--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>

然后在其yml配置文件中添加RabbitMQ的相关配置:

# RabbitMQ相关配置 spring: rabbitmq: host: mpolaris.top port: 5672 username: admin password: 1234321 2.4 测试

按顺序启动Eureka服务注册中心7001,ConfigServer配置中心3344,ConfigClient配置中心客户端3355/3366,此时远端GitHub上的配置信息如下:

server: info: my name is config server , this is master/config-dev.yml

分别访问配置中心及其配置中心客户端的服务中心,发现结果都是一样的。

然后将Gitee远端的配置信息中info加一个 =>,然后对服务配置中心发送POST请求:

curl -X POST "{配置中心的地址}/actuator/bus-refresh" # 如此时我们该发送的POST请求为: curl -X POST "http://localhost:3344/actuator/bus-refresh"

此时再访问配置中心及客户端的配置信息,发现所有服务的配置信息都得到了更新:

image-20210304180104875

打开RabbitMQ的控制面板,我们可以发现有一个交换机,这就对应消息总线发送消息的交换机:

image-20210304180238955

3. SpringCloud Bus动态刷新定点通知

在全局广播中,我们更新配置文件的信息对所有服务都进行了通知,但是假设我们只想通知3355,而不想通知3366又该怎么办呢,这就需要我们用定点通知的方法通知3355,也就是说我们进行消息通知时只指定具体某个实例生效而不是全部生效,这种情况下就需要修改我们发送的POST请求:

curl -X POST "http://{配置中心的地址}/actuator/bus-refresh/{destination}"

这样的话,actuator/bus-refresh请求就不再发送到具体的服务实例上,而是发给ConfigServer配置中心并通过destination参数指定需要更新配置的服务或实例。其中destination具体为 微服务+端口号

比如现在我们修改远端配置文件,但是我们只想通知3355的配置更新信息,而不想通知3366,此时我们发送的POST请求就应该是:

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspyyj.html