在微服務(wù)架構(gòu)的系統(tǒng)中,我們通常會(huì)使用輕量級(jí)的消息代理來構(gòu)建一個(gè)公用的消息主題讓系統(tǒng)中所有微服務(wù)實(shí)例都連接上來,由于該主題中產(chǎn)生的消息會(huì)被所有實(shí)例監(jiān)聽和消費(fèi),所以我們稱它為消息總線。在總線上的各個(gè)實(shí)例都可以方便地廣播一些需要讓其他連接在該主題上的實(shí)例都知道的消息,例如配置信息的變更或者其他一些管理操作等。
由于消息總線在微服務(wù)架構(gòu)系統(tǒng)中被廣泛使用,所以它同配置中心一樣,幾乎是微服務(wù)架構(gòu)中的必備組件。Spring Cloud作為微服務(wù)架構(gòu)綜合性的解決方案,對(duì)此自然也有自己的實(shí)現(xiàn),這就是本章我們將要具體介紹的Spring Cloud Bus。通過使用Spring Cloud Bus,可以非常容易地搭建起消息總線,同時(shí)實(shí)現(xiàn)了一些消息總線中的常用功能,比如,配合Spring Cloud Config實(shí)現(xiàn)微服務(wù)應(yīng)用配置信息的動(dòng)態(tài)更新等。
目前Spring Cloud Bus消息總線只是實(shí)現(xiàn)了對(duì)RabbitMQ以及Kafka的支持。
11.1、使用Spring Cloud Bus的架構(gòu)

11.2、實(shí)現(xiàn)
11.2.1、在springcloud-demo-item添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
11.2.1、在bootStrap.properties添加rabbitmq的配置
#RabbitMQ相關(guān)的配置
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
11.2.2、修改web hook的地址
修改bithub中的web hook的地址為:http://ip:18200/bus/refresh
11.2.3、啟動(dòng)測(cè)試
查看RabbitMQ中的交換機(jī):



11.3、架構(gòu)優(yōu)化
在前面實(shí)現(xiàn)的架構(gòu)中,發(fā)現(xiàn)item這個(gè)實(shí)例不僅僅是提供了商品查詢服務(wù),還負(fù)責(zé)發(fā)送更新消息到RabbitMQ。
這其實(shí)是違反了微服務(wù)架構(gòu)中的職責(zé)單一原則。
其實(shí)這個(gè)架構(gòu)是可以改進(jìn)的,就是將原有的Config Server不僅僅是提供配置查詢的服務(wù),而且還要負(fù)責(zé)更新消息的發(fā)送。

11.3.1、在springcloud-demo-config中導(dǎo)入依賴(同11.2.1)
11.3.2、在application.properties文件中添加rabbitMQ配置并關(guān)閉actuator安全認(rèn)證
#RabbitMQ相關(guān)的配置
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#是否開啟actuator認(rèn)證
management.security.enabled=false
11.3.3、修改github webhook鉤子
11.3.4、重啟測(cè)試
測(cè)試結(jié)果與上面一樣。
Spring Cloud—一、微服務(wù)架構(gòu)
Spring Cloud—二、Spring Cloud簡(jiǎn)介
Spring Cloud—三、使用Spring Cloud實(shí)現(xiàn)微服務(wù)
Spring Cloud—四、Spring Cloud快速入門
Spring Cloud—五、注冊(cè)中心Eureka
Spring Cloud—六、使用Ribbon實(shí)現(xiàn)負(fù)載均衡
Spring Cloud—七、容錯(cuò)保護(hù):Hystrix
Spring Cloud—八、使用Feign實(shí)現(xiàn)聲明式的Rest調(diào)用
Spring Cloud—九、服務(wù)網(wǎng)關(guān)Spring Cloud Zuul
Spring Cloud—十、使用Spring Cloud Config統(tǒng)一管理微服務(wù)
Spring Cloud—十一、使用Spring Cloud Bus(消息總線)實(shí)現(xiàn)自動(dòng)更新