RabbitMQ消息總線方式刷新配置服務(wù)全過程
前言介紹
在微服務(wù)架構(gòu)中,為了更方便的向微服務(wù)實(shí)例廣播消息,我們通常會(huì)構(gòu)建一個(gè)消息中心,讓所有的服務(wù)實(shí)例都連接上來,而該消息中心所發(fā)布的消息都會(huì)被微服務(wù)實(shí)例監(jiān)聽和消費(fèi),我們把這種機(jī)制叫做消息總線(SpringCloud
Bus)
當(dāng)我們的微服務(wù)達(dá)到是幾個(gè)到百個(gè)以上,在更新配置時(shí),不太可能一個(gè)個(gè)刷新或者重啟,這樣既不能保證效率也容易導(dǎo)致遺漏造成事故。因此我們需要SpringCloud Bus 提供總線服務(wù),在我們push代碼到Git的時(shí)候,通過Webhooks(http://localhost:port/actuator/bus-refresh/)執(zhí)行刷新,消息總線會(huì)通知各個(gè)實(shí)例更新配置,以達(dá)到自動(dòng)更新全服務(wù)配置。

環(huán)境準(zhǔn)備
- jdk 1.8、idea2018、Maven3
- Spring Boot 2.0.6.RELEASE
- Spring Cloud Finchley.SR2
需要有一個(gè)Git帳號(hào),用來創(chuàng)建配置中心以及開啟Webhooks服務(wù),添加回調(diào)
RabbitMQ服務(wù)端環(huán)境安裝
- 下載Erlang;http://www.erlang.org/downloads {安裝后配置環(huán)境變量:D:\Program Files\erl10.5}
- 下載rabbitMQ;http://www.rabbitmq.com/download.html {安裝后CMD依次執(zhí)行}
- cd D:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.1\sbin
- rabbitmq-plugins.bat enable rabbitmq_management
- rabbitmq-service.bat stop
- rabbitmq-service.bat start
- 瀏覽器訪問;http://127.0.0.1:15672
- 服務(wù)端口5672
代碼示例
itstack-demo-springcloud-07
├── itstack-demo-springcloud-config-client
│ └── src
│ └── main
│ ├── java
│ │ └── org.itstack.demo
│ │ ├── web
│ │ │ └── ConfigClientController.java
│ │ └── ConfigClientApplication.java
│ └── resources
│ ├── application.yml
│ └── bootstrap.yml
├── itstack-demo-springcloud-config-server
│ └── src
│ └── main
│ ├── java
│ │ └── org.itstack.demo
│ │ └── ConfigServerApplication.java
│ └── resources
│ └── application.yml
└── itstack-demo-springcloud-eureka-server
└── src
└── main
├── java
│ └── org.itstack.demo
│ └── EurekaServerApplication.java
└── resources
└── application.yml
itstack-demo-springcloud-config-client | 配置獲取客戶端方,提供自動(dòng)刷新Http
web/ConfigClientController.java & 添加注解@RefreshScope自動(dòng)刷新配置
@RestController
@RefreshScope
public class ConfigClientController {
@Value("${info.profile:error}")
private String profile;
@GetMapping("/config")
public Mono<String> config() {
return Mono.justOrEmpty(profile);
}
}
ConfigClientApplication.java & 普通配置即可
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
application.yml & 需要配置endpoints,這樣才可以暴漏刷新服務(wù)
spring:
application:
name: itstack-demo-springcloud-config-client
cloud:
bus:
trace:
enabled: true
enabled: true
server:
port: 9001
# 如果不使用消息總線,則開啟如下配置 /actuator/refresh 這個(gè) Endpoint 暴露出來
#management:
# endpoints:
# web:
# exposure:
# include: refresh
bootstrap.yml & 配置中心服務(wù)配置,http://localhost:7397 添加配置服務(wù)
spring:
cloud:
config:
name: config-client # 對(duì)應(yīng) {application} 部分,例如;config-client-dev = 只取最后一個(gè)符號(hào)'-'之前的
profile: dev # 對(duì)應(yīng) {profile} 部分
label: master # 對(duì)應(yīng) {label} 部分,即 Git 的分支。如果配置中心使用的是本地存儲(chǔ),則該參數(shù)無用
discovery:
enabled: true # 開啟 config 服務(wù)發(fā)現(xiàn)支持
service-id: itstack-demo-springcloud-config-server # 配置服務(wù)name
#配置文件會(huì)被轉(zhuǎn)換成 Web,訪問規(guī)則如下;
#/{application}/{profile}[/{label}]
#/{application}-{profile}.yml
#/{label}/{application}-{profile}.yml
#/{application}-{profile}.properties
#/{label}/{application}-{profile}.properties
eureka:
client:
service-url:
defaultZone: http://localhost:7397/eureka/
itstack-demo-springcloud-config-server | 配置提供服務(wù)端方,鏈接Git配置工程地址
ConfigServerApplication.java & 添加注解@EnableConfigServer設(shè)置成配置服務(wù)中心
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
application.yml & 配置信息,消息總線刷新
server:
port: 8080
spring:
application:
name: itstack-demo-springcloud-config-server
cloud:
config:
server:
git:
uri: https://github.com/fuzhengwei/itstack-demo-config # 換成自己的配置Git倉庫的地址,如果沒有可以新建工程地址,也可以克隆我的;https://github.com/fuzhengwei/itstack-demo-config
search-paths: config-repo # Git倉庫地址下的底層配置文件名稱,如果配置多個(gè)用逗號(hào)','分割。
# 如果配置中心需要訪問權(quán)限,則開啟配置
# spring.cloud.config.server.git.username:Github賬戶
# spring.cloud.config.server.git.password:Github密碼
eureka:
client:
service-url:
defaultZone: http://localhost:7397/eureka/
management:
endpoints:
web:
exposure:
include: bus-refresh
itstack-demo-springcloud-eureka-server | 服務(wù)注冊(cè)發(fā)現(xiàn)
EurekaServerApplication.java & 添加注解@EnableEurekaServer啟動(dòng)服務(wù)發(fā)現(xiàn)
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run( EurekaServerApplication.class, args );
}
}
application.yml & 配置信息
server:
port: 7397
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: itstack-demo-springcloud-eureka-server
測(cè)試驗(yàn)證
1.準(zhǔn)備好自己Github的配置倉庫,也可以克隆我的Git;https://github.com/fuzhengwei/itstack-demo-config {有一組配置配置文件}
2.配置Webhooks,在https://github.com/換你自己的fuzhengwei/換你自己的itstack-demo-netty/settings/hooks/new
3.分別啟動(dòng)服務(wù)
1.啟動(dòng)RabbitMQ服務(wù);http://127.0.0.1:15672/#/ 2.itstack-demo-springcloud-eureka-server 服務(wù)注冊(cè)發(fā)現(xiàn) 3.itstack-demo-springcloud-config-server 配置Server 4.itstack-demo-springcloud-config-client 配置Client
4.訪問配置服務(wù),端口7397;http://localhost:8080/config-client/dev
4.1.訪問結(jié)果
{
"name": "config-client",
"profiles": [
"dev"
],
"label": null,
"version": "ea0b1a1017595d542aa01b8b2bda68f9620dd81a",
"state": null,
"propertySources": [
{
"name": "https://github.com/fuzhengwei/itstack-demo-config/config-repo/config-client-dev.yml",
"source": {
"info.profile": "dev bus"
}
}
]
}
4.2.訪問規(guī)則{配置文件會(huì)被轉(zhuǎn)換成 Web 接口,規(guī)則如下}
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties4.3.訪問配置文件;http://localhost:8080/config-client-dev.yml {可以直接訪問查看配置信息}
info: profile: dev bus
5.訪問使用配置的客戶端
5.1.訪問端口9001;http://localhost:9001/config
dev bus
5.2更改配置,POST請(qǐng)求刷新配置總線;http://localhost:8080/actuator/bus-refresh/ {如果配置Git的Webhooks則更新代碼自動(dòng)刷新}
5.3訪問端口9001;http://localhost:9001/config
dev
總結(jié)
Spring Cloud Bus 可以更加方便的控制全局信息,用于統(tǒng)一刷新并通過MQ方式通過客戶端
如果你的內(nèi)網(wǎng)想進(jìn)行Git的Webhooks配置,可以使用http://natapp.cn進(jìn)行內(nèi)網(wǎng)穿透映射,他會(huì)給你提供免費(fèi)外網(wǎng)調(diào)用服務(wù)
消息總線方式不只是應(yīng)用于配置刷新,在一起同步信息請(qǐng)求中都可以使用,以及自己的項(xiàng)目架設(shè)上
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Maven3種打包方式中maven-assembly-plugin的使用詳解
這篇文章主要介紹了Maven3種打包方式中maven-assembly-plugin的使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Spring Boot項(xiàng)目添加外部Jar包以及配置多數(shù)據(jù)源的完整步驟
這篇文章主要給大家介紹了關(guān)于Spring Boot項(xiàng)目添加外部Jar包以及配置多數(shù)據(jù)源的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Java中String的intern()方法詳細(xì)說明
這篇文章主要介紹了Java中String的intern()方法詳細(xì)說明,String::intern()是一個(gè)本地方法,他的作用就是如果字符串常量池中已經(jīng)包含了一個(gè)等于此String對(duì)象的字符串,則返回代表池中的這個(gè)字符串額String對(duì)象的引用,需要的朋友可以參考下2023-11-11
Java注解處理器學(xué)習(xí)之編譯時(shí)處理的注解詳析
編譯時(shí)注解相信對(duì)每一個(gè)java開發(fā)者來說都不陌生,下面這篇文章主要給大家介紹了關(guān)于Java注解處理器學(xué)習(xí)之編譯時(shí)處理的注解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧2018-05-05
Spring Boot項(xiàng)目打包指定包名實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Spring Boot項(xiàng)目打包指定包名實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
郵件的組織結(jié)構(gòu)介紹 郵件實(shí)現(xiàn)詳解(三)
這篇文章主要為大家詳細(xì)介紹了郵件的組織結(jié)構(gòu),郵件內(nèi)容的基本格式和具體細(xì)節(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
springBoot+mybaties后端多層架構(gòu)的實(shí)現(xiàn)示例
本文主要介紹了springBoot+mybaties后端多層架構(gòu)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Java 自定義動(dòng)態(tài)數(shù)組方式
這篇文章主要介紹了Java自定義動(dòng)態(tài)數(shù)組方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
IntelliJ?IDEA?2022安裝注冊(cè)永久激活
java開發(fā)工具IntelliJ?IDEA深受用戶喜愛,很多朋友對(duì)這個(gè)idea開發(fā)工具比較忠心,一旦有新版本發(fā)出,很多小伙伴就迫不及待的想更新,今天小編給大家?guī)砹薸dea2022.1最新永久激活碼,親測(cè)有效,喜歡的朋友快來下載體驗(yàn)吧2022-08-08

