什么是消息總線
1. 概念
在微服務架構中,通常會使用輕量級的消息代理來構建一個共用的消息主題來連接各個微服務實例, 它廣播的消息會被所有在注冊中心的微服務實例監聽和消費,也稱消息總線
2. springcloud bus
springcloud中也有對應的解決方案,springcloud bus 將分布式的節點用輕量的消息代理連接起來, 可以很容易搭建消息總線,配合springcloud config 實現微服務應用配置信息的動態更新。
3. 其他
消息代理屬于中間件。設計代理的目的就是為了能夠從應用程序中傳入消息,并執行一些特別的操作。 開源產品很多如activemq、kafka、rabbitmq、rocketmq等 目前springcloud僅支持rabbitmq和kafka。本文采用rabbitmq實現這一功能。
搭建分布式配置中心
1. config 架構
當一個系統中的配置文件發生改變的時候,我們需要重新啟動該服務,才能使得新的配置文件生效,spring cloud config可以實現微服務中的所有系統的配置文件的統一管理,而且還可以實現當配置文件發生變化的時候,系統會自動更新獲取新的配置。
2. git 環境搭建
使用 碼云 環境搭建 git
碼云環境地址: https://gitee.com/guopf/springcloud_bus
3. git服務器上傳配置文件
命名規范 服務名稱-版本.yml 例如configclient_dev.yml
4. 搭建 eureka 服務注冊中心
具體搭建環境隨后補充,可以使用我自己部署的 http://47.105.86.222:8100 (配置地址http://47.105.86.222:8100/eureka)
5. 搭建 config-server 服務
1. maven 依賴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<dependencies> <!-- springboot整合web組件 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <!--spring-cloud 整合 config-server --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-config-server</artifactid> <version> 2.0 . 2 .release</version> </dependency> <!-- springboot整合eureka客戶端 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> <version> 2.0 . 2 .release</version> </dependency> </dependencies> |
2. 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
### 服務地址 端口 server: port: 8800 ### 服務名稱 spring: application: name: config_server cloud: config: server: git: ### git 地址 uri: https: //gitee.com/guopf/springcloud_bus.git username: password: ### 配置讀取文件夾 search-paths: config ### 分支 label: master ### eureka 配置 eureka: client: service-url: defaultzone: http: //47.105.86.222:8100/eureka register-with-eureka: true fetch-registry: true |
3. 啟動
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/** * @enableeurekaclient : 開啟 eureka 客戶端 * @enableconfigserver : 開啟 config 服務端 * */ @springbootapplication @enableeurekaclient @enableconfigserver public class app { public static void main(string[] args) { springapplication.run(app. class ,args); } } |
搭建 config-client 服務
1. 手動更新
1. maven 依賴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<dependencies> <!-- springboot整合web組件 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-config-client</artifactid> <version> 2.0 . 2 .release</version> </dependency> <!-- springboot整合eureka客戶端 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> <version> 2.0 . 2 .release</version> </dependency> <!--核心jar包,集成rabbitmq 消息總線 bus <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-bus-amqp</artifactid> </dependency> --> <!-- actuator監控中心 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency> </dependencies> |
2. 配置文件(bootstrap.yml)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
### 端口 server: port: 8801 ### eureka 配置中心 eureka: client: service-url: defaultzone: http: //47.105.86.222:8100/eureka fetch-registry: true register-with-eureka: true ### 配置服務名稱,要和config 配置中心文件保持一致 spring: application: name: configclient cloud: config: ### 讀取配置 profile: dev discovery: ### enabled: true ### config 配置中心配置的服務名稱 service-id: config_server management: endpoints: web: exposure: include: "*" |
3. 啟動
1
2
3
4
5
6
7
8
|
@springbootapplication @enableeurekaclient @enablediscoveryclient public class app { public static void main(string[] args) { springapplication.run(app. class ,args); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/** * 在讀取配置文件信息的地方進行添加 @refreshscope 注解 */ @restcontroller @refreshscope public class appcontroller { @value ( "${userage}" ) private string userage; @getmapping ( "/userage" ) public string config(){ system.out.println( "userage : " + userage); return userage; } } |
修改git倉庫中的配置,進行手動更新,post請求
http://127.0.0.1:8801/actuator/refresh 啟動刷新器 從cofnig_server讀取
2. 使用消息總線 bus 更新
1. 添加依賴信息
在 config_server,config_client 中添加
1
2
3
4
5
6
7
8
9
|
<dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-bus-amqp</artifactid> </dependency> <!-- actuator監控中心 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency> |
2. 配置文件修改
添加對 rabbbitmq的配置, rabbitmq服務和config_server,config_client 在一個服務器上,使用默認配置即可
1
2
3
4
5
6
7
|
### rabbitmq 配置信息 rabbitmq: addresses: 47.105 . 86.222 username: guest password: guest port: 5672 virtual-host: / |
3. 刷新
http://127.0.0.1:8801/actuator/bus-refresh post方式
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://segmentfault.com/a/1190000017391824