SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)git創建全局配置文件zoopkepper+kafka搭建搭建config服務配置中心搭建微服務客戶端相同的方法再做一個客戶端(為了體現一處配置中心修改處處生效,所以再做一個客戶端)工作完成我們來進行測試一下別慌還有最後一步下載一個postman最後的最後測試總結

git創建全局配置文件

登陸git賬戶,然後新建一個倉庫

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

填寫倉庫名稱,選公有倉庫

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

3.創建一個新文件,命名為config-dev.properties(注意這裡名稱有講究),我這裡個人習慣用properties配置,喜歡yml配置的同理修改即可,文件內容可以根據實際項目配置,我這裡隨便配個玩一玩兒

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

zoopkepper+kafka搭建

參考: zookeeper+kafka環境搭建配置

搭建config服務配置中心

pom文件導入,這裡我不寫版本號是因為在父工程已經繼承了依賴,這一塊對微服務搭建不瞭解的可以先去了解一下微服務環境搭建和版本搭配相關問題


<code>org.springframework.bootspring-boot-starter-web
org.springframework.bootspring-boot-starter-actuator

org.springframework.cloudspring-cloud-starter-bus-kafka
org.springframework.cloudspring-cloud-starter-stream-kafka
org.springframework.cloudspring-cloud-bus

org.springframework.cloudspring-cloud-config-server/<code>


application.properties配置文件

<code>server.port=3355/<code>
<code>spring.application.name=service-config-server
##註冊eureka
eureka.client.service-url.defaultZone=http://eureka7001.com:7001/eureka/

##uri就是前面創建的倉庫地址
spring.cloud.config.server.git.uri=https://github.com/*******/config-server.git

##當然遠程訪問需要你的git賬號和密碼
spring.cloud.config.server.git.username=78**3****@qq.com
spring.cloud.config.server.git.password=c**n****

##這個表示遠程倉庫的配置文件在什麼路徑下
spring.cloud.config.server.git.search-paths=config-server

#文件在遠程倉庫哪個分支下
spring.cloud.config.server.git.default-label=master

#指定kafka的代理地址,裝好kafka默認端口號就是9092
spring.kafka.bootstrap-servers=localhost:9092

# 指定默認消費者group id
spring.kafka.consumer.group-id=test

#actuator監控器暴露端口,不指定的話默認只暴露/health和/info,將不能實現全局監控效果
management.endpoints.web.exposure.include=*/<code>
<code>#打開自動刷新功能
spring.cloud.bus.refresh.enabled=true/<code>

啟動類

<code>@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class configServer3355 {
public static void main(String[] args) {
SpringApplication.run(configServer3355.class,args);
}
}/<code>

搭建微服務客戶端

pom.xml

<code>org.springframework.boot
spring-boot-starter-web/<code>
<code>org.springframework.boot
spring-boot-starter-actuator

org.springframework.cloud
spring-cloud-starter-bus-kafka

org.springframework.cloud
spring-cloud-starter-stream-kafka

org.springframework.cloud
spring-cloud-bus

org.springframework.cloud
spring-cloud-starter-config

org.springframework.boot
spring-boot-test
2.2.2.RELEASE
test

org.springframework.cloud
spring-cloud-starter-netflix-eureka-clientorg.springframework.boot
spring-boot-starter-actuator

org.springframework.cloud
spring-cloud-starter-bus-kafka

org.springframework.cloud
spring-cloud-starter-stream-kafka

org.springframework.cloud
spring-cloud-bus

org.springframework.cloud
spring-cloud-starter-config

org.springframework.boot
spring-boot-test
2.2.2.RELEASE
test

org.springframework.cloud
spring-cloud-starter-netflix-eureka-client/<code>


application.properties配置文件

<code>server.port=3333
spring.application.name=consumer-config-client-3333
eureka.client.service-url.defaultZone=http://eureka7001.com:7001/eureka//<code>

bootstrap.properties配置文件,注意客戶端多了一個這個配置文件,spring boot的加載屬由文件的優先級決定的,你想要在加載屬性之前去config server配置中心上取配置文件,意思也就是說bootstrap.properties的加載是先於application.properties的。

<code>#指定git上的分支
spring.cloud.config.label=master/<code>
<code>#指定git上的配置文件名,前面說過git上的配置文件命名是有說法的config-dev
spring.cloud.config.name=config
spring.cloud.config.profile=dev

#指定向誰取配置文件,這裡是向前面做的配置中心3355取配置
spring.cloud.config.uri=http://localhost:3355/

#暴露端口
management.endpoints.web.exposure.include=*

#打開自動刷新
spring.cloud.bus.refresh.enabled=true/<code>
<code>#指定kafka的地址
spring.kafka.bootstrap-servers=localhost:9092/<code>

啟動類+controller

<code>@SpringBootApplication
@EnableEurekaClient
public class ConfigClient3333 {
public static void main(String[] args) {
SpringApplication.run(ConfigClient3333.class,args);

}
}/<code>


<code>@RestController
@RefreshScope
public class HelloController {
@Value("${chuan.haha}")
private String hello;/<code>


<code>@RequestMapping("/hello")
public String from() {
return this.hello;
}
}/<code>

相同的方法再做一個客戶端(為了體現一處配置中心修改處處生效,所以再做一個客戶端)

最後的啟動效果,先啟動Eureka服務,再啟動3355配置中心,再啟動剩下兩個客戶端。

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

工作完成我們來進行測試一下

配置中心訪問git倉庫的規則,application相當如本案例的“config”,profie相當於“dev”,lable就是指git分支/{application}/{profile}/[label] /{application}-{profile}.yml/{label}/{application}-{profile}.yml/{application}-{profile}.properties/{label}/{application}-{profile}.properties

如圖配置中心訪問成功

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

兩個客戶端的訪問結果怎麼樣子呢?

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

看來都訪問到了配置中心的配置了,結束了嗎?還沒有,我們的目的是修改配置時候讓每個客戶端都生效,此時我們打開我們的github,把配置文件的內容修改一下,把版本號修改為2然後提交。

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

點開3355配置中心的的web進行刷新,果然變為2了

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

點開3344和3333客戶端刷新呢?會怎麼樣?

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

此時發現無論怎麼刷新,3344和3333客戶端都還是1版本,怎麼回事,說好的全局配置呢,是哪裡配置出錯了嗎?

別慌還有最後一步

其實這裡並不是配置或者代碼有問題,先總結一下,我們的流程是怎麼走的,首先我們是3355配置中心向git倉庫拉去配置文件,然後3344和3333客戶端分別向3355再拉配置文件,也就是github->3355->3344&3333

借用一個圖可以看清楚點

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

這裡可以看到,我們綠色這個配置中心做了,上面的git倉庫也有了,右邊的2個客戶端我們也有了(當然圖裡有4個客戶端),那我們還缺什麼?顯然下面還有一個小電腦圖標寫著POST /bus/refresh

下載一個postman

下載一個postman,沒聽說這個工具的可以瞭解一下,應該很簡單,可以百度直接下載到,免費的,就是模擬發送post請求的一個工具。

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

這裡我們根據圖,向3355配置中心發送一個post請求

最後的最後測試

刷新3333和3344

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

SpringCloud+git配置中心(Kafka+bus消息總線實現全局刷新)

終於出現我們要的效果啦!


分享到:


相關文章: