javascript
第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)V2.0_dev
前言:
Spring Cloud Bus 將分布式的節點用輕量的消息代理連接起來。
它可以用于廣播配置文件的更改或者服務之間的通訊,也可以用于監控。
本文要講述的是用Spring Cloud Bus實現通知微服務架構的配置文件的更改。
一、準備工作
本文還是基于上一篇文章來實現。按照官方文檔,我們只需要在配置文件中配置 spring-cloud-starter-bus-amqp ;這就是說我們需要裝rabbitMq,點擊rabbitmq官網下載也可用我的下載好的。至于怎么使用 rabbitmq,可以參考我的操作文檔。
Erlang:
鏈接:https://pan.baidu.com/s/1JevmH4MyAII1tIjzfUKx_Q
提取碼:h9g2
Rabbitmq:
鏈接:https://pan.baidu.com/s/1dbK7PL6FHD4qO2KY9qXigA
提取碼:s2bo
Rabbitmq操作手冊:
RabbitMQ基本概念(二):windows下安裝
創建父工程并引入依賴:
<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version><relativePath/></parent><modules><module>config-server</module><module>eureka-server</module><module>config-client</module></modules><groupId>com.gblfy</groupId><artifactId>sc-f-chapter8</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>sc-f-chapter8</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.RELEASE</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</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></project>二、改造config-client
第1步:在pom文件加上spring-cloud-starter-bus-amqp起步依賴,如下:
<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>第2步:在配置文件bootstrap.yml中加上RabbitMq的配置+打開自動刷新
| 用戶名 | guest |
| 密碼 | guest |
| 端口 | 5672 |
包括RabbitMq的地址,用戶名、密碼、端口。并需要加上spring.cloud.bus的三個配置,具體如下:
eureka:client:service-url:defaultZone: http://localhost:8761/eureka server:port: 8881 spring:application:name: config-clientcloud:config:discovery:enabled: trueservice-id: CONFIG-SERVERprofile: devbus:enabled: truetrace:enabled: falserabbitmq:host: localhostusername: guestpassword: guestport: 5672 #打開自動刷新 management:endpoints:web:exposure:include: bus-refresh第3步:ConfigClientApplication啟動類代碼如下:
@SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}// 測試鏈接:curl -v -X POST "http://localhost:8882/actuator/bus-refresh" // 在命令行執行以上命令即可 }第4步:在配置類GirlConfig上面添加@RefreshScope注解
@Data @Component @ConfigurationProperties(prefix = "girl") @RefreshScope public class GirlConfig {private String name;private Integer age; }第5步:web訪問類GirlController
@RestController @RequestMapping("/girl") public class GirlController {@Autowiredprivate GirlConfig girlConfig;@GetMapping("/info")public String getGirlInfo() {return "name:" + girlConfig.getName() + ",age:" + girlConfig.getAge();} }第6步:依次啟動
- eureka-server
- config-server
- 啟動兩個config-client實例
- 端口為:8881、8882
訪問http://localhost:8881/girl/info 或者http://localhost:8882/girl/info
瀏覽器顯示:
name:yuxin age:1第7步:這時我們登錄遠程代碼倉庫將girl.name的值和girl.age的值分別修改為yuxin2,age2( 即改變配置文件name和age的值)。
如果是傳統的做法,需要重啟服務,才能達到配置文件的更新。
第8步:我們只需要發送post請求:http://localhost:8881/actuator/bus-refresh或者http://localhost:8882/actuator/bus-refresh
溫馨提示:
第9步:這時我們再訪問:http://localhost:8881/girl/info或者http://localhost:8882/girl/info
- 瀏覽器顯示:
三、此時的架構:
流程簡述:
架構演進優化:
根據此圖我們可以看出利用Spring Cloud Bus做配置更新的步驟:
1.提交代碼觸發post給客戶端A發送bus/refresh
2. 客戶端A接收到請求從Server端更新配置并且發送給Spring Cloud Bus
3. Spring Cloud bus接到消息并通知給其它客戶端
4. 其它客戶端接收到通知,請求Server端獲取最新配置
5. 全部客戶端均獲取到最新的配置,從而使整個微服務集群都達到更新配置文件。
本文源碼下載:
dev分支(最新企業實戰版本):
https://github.com/gb-heima/springcloud-practical-column/tree/dev/sc-f-chapter8
master分支(入門版本):
https://github.com/gb-heima/springcloud-practical-column/tree/master/sc-f-chapter8
總結
以上是生活随笔為你收集整理的第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)V2.0_dev的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统架构设计师 - 软件架构设计 - 架
- 下一篇: 管理修改