javascript
史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)
轉:https://blog.csdn.net/forezp/article/details/70148235
Spring Cloud Bus 將分布式的節點用輕量的消息代理連接起來。它可以用于廣播配置文件的更改或者服務之間的通訊,也可以用于監控。本文要講述的是用Spring Cloud Bus實現通知微服務架構的配置文件的更改。
一、準備工作
本文還是基于上一篇文章來實現。按照官方文檔,我們只需要在配置文件中配置 spring-cloud-starter-bus-amqp ;這就是說我們需要裝rabbitMq,點擊rabbitmq(http://www.rabbitmq.com/)下載。至于怎么使用 rabbitmq,搜索引擎下。
二、改造config-client
在pom文件加上起步依賴spring-cloud-starter-bus-amqp,完整的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.forezp</groupId><artifactId>config-client</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>config-client</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.RC1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>在配置文件application.properties中加上RabbitMq的配置,包括RabbitMq的地址、端口,用戶名、密碼,代碼如下:
spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 # spring.rabbitmq.username= # spring.rabbitmq.password=如果rabbitmq有用戶名密碼,輸入即可。
依次啟動eureka-server、confg-cserver,啟動兩個config-client,端口為:8881、8882。
訪問http://localhost:8881/hi 或者http://localhost:8882/hi 瀏覽器顯示:
這時我們去代碼倉庫將foo的值改為“foo version 4”,即改變配置文件foo的值。如果是傳統的做法,需要重啟服務,才能達到配置文件的更新。此時,我們只需要發送post請求:http://localhost:8881/bus/refresh,你會發現config-client會重新讀取配置文件
重新讀取配置文件:
這時我們再訪問http://localhost:8881/hi 或者http://localhost:8882/hi 瀏覽器顯示:
foo version 4另外,/bus/refresh接口可以指定服務,即使用”destination”參數,比如 “/bus/refresh?destination=customers:**” 即刷新服務名為customers的所有服務,不管ip。
三、分析
此時的架構圖:
當git文件更改的時候,通過pc端用post 向端口為8882的config-client發送請求/bus/refresh/;此時8882端口會發送一個消息,由消息總線向其他服務傳遞,從而使整個微服務集群都達到更新配置文件。
四、其他擴展(可忽視)
可以用作自定義的Message Broker,只需要spring-cloud-starter-bus-amqp, 然后再配置文件寫上配置即可,同上。
Tracing Bus Events:
需要設置:spring.cloud.bus.trace.enabled=true,如果那樣做的話,那么Spring Boot TraceRepository(如果存在)將顯示每個服務實例發送的所有事件和所有的ack,比如:(來自官網)
本文源碼下載:
https://github.com/forezp/SpringCloudLearning/tree/master/chapter8
五、參考資料
http://projects.spring.io/spring-cloud/spring-cloud.html#_spring_cloud_bus
總結
以上是生活随笔為你收集整理的史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国研发电磁武器?
- 下一篇: 士官学校里的教官的工资和部队有什么不同