博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud 之Bus消息总线
阅读量:2454 次
发布时间:2019-05-10

本文共 1666 字,大约阅读时间需要 5 分钟。

文章目录

分析

之前使用actuator监控中心完成刷新功能,但是在Config Client服务端需要发送POST请求来手动刷新,如果Config Client有很多的话,那么需要一个一个地发送POST请求,这显然是不现实的做法。

方案

使用消息队列中的Topic, 通过消息实现通知。

目前Spring Cloud Bus消息总线只是实现了对RabbitMQ以及Kafka的支持。

参考《RabbitMQ教程》 https://blog.csdn.net/hellozpc/article/details/81436980

SpringCloudBus的架构

在这里插入图片描述

在这里插入图片描述

改造config-client

在pom文件加上起步依赖spring-cloud-starter-bus-amqp。

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

在bootstrap.yml添加rabbitmq的配置

spring:  application:    name: config-client  cloud:    bus:      enabled: true      trace:        enabled: true  rabbitmq:    host: 127.0.0.1    port: 5672    username: guest    password: guest#开启所有端点management:  endpoints:    web:     exposure:       include: "*"

启动测试

保证Rabbit的服务开启。

RabbitMQ后台管理:http://127.0.0.1:15672

帐号密码:guest/guest
在这里插入图片描述
启动config-client工程后查看RabbitMQ中的交换机:
在这里插入图片描述
查看队列:
在这里插入图片描述
查看该队列绑定到了springCloudBus
在这里插入图片描述
修改config-client服务的端口,再启动一个config-client实例,进行测试。
在这里插入图片描述
发现,有2个队列,分别都绑定到springCloudBus的交换机。

在Git上修改配置文件的内容进行测试。

然后发送post请求:curl -X POST http://localhost:8096/actuator/bus-refresh
会发现所有config-client的配置都更新了。

流程总结

更新文件到git服务器,发送post请求/bus/refresh,实例将消息发送到springCloudBus的交换机,由于这个实例的队列页绑定到交换机,所以其他实例也获取到了更新的通知,然后去Config Server获取最新的数据。

架构优化

在前面实现的架构中,config-client实例应该是一个具体业务相关的服务,但是我们让它负责了发送更新的消息到RabbitMQ。

这其实是违反了微服务架构中的职责单一的原则。
其实这个架构是可以改进的,就是将原有的Config Server不仅仅提供配置查询的服务,而且还要负责更新消息的发送。
在这里插入图片描述

改造config-server

导入依赖。

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

在application.yml添加rabbitmq的配置。

然后config-server服务上发送actuator/bus-refreshPOST请求就可以将配置更新到所有的config-client服务上。

你可能感兴趣的文章
上海微钉科技面试题_钉住面试的7个技巧
查看>>
linux有桌面有的没桌面_Linux桌面的政治
查看>>
库蒂尼奥_尼奥基入门
查看>>
强化学习入门论文_强化学习入门
查看>>
kubernetes入门_Kubernetes入门
查看>>
aalto 交互_向芬兰的Aalto Fablab付款
查看>>
迈向更大包容性
查看>>
linux 邮件开源工具_5个适用于Linux的开源个人理财工具
查看>>
机器学习入门python_使用Python进行机器学习入门
查看>>
kde调整分辨率_7个很酷的KDE调整将改变您的生活
查看>>
卫星重访周期_通过开放式冒险重访巨大的洞穴
查看>>
Raspberry Pi Zero W修复了网络遗漏
查看>>
公众号精选评论点赞_十大和编辑精选:三月评论
查看>>
python中flask_为什么以及如何在Python Flask中处理异常
查看>>
适合初学者的开源c需要项目_您的开源项目需要总裁吗?
查看>>
Python脚本可自动替换Scribus中的文本
查看>>
代码交互式图文_围绕交互式代码构建教室
查看>>
公众号精选评论点赞_十大和编辑精选:七月评论
查看>>
软齿面减速机抛开图_为了共同的目标而抛开自我
查看>>
维度诅咒_CEO自我的礼物和诅咒
查看>>