Spring cloud實(shí)踐之道四(消息處理)

說(shuō)明

之前我們知道了如何使用spring cloud config 進(jìn)行統(tǒng)一配置,但是,當(dāng)配置發(fā)生了變化的時(shí)候,需要服務(wù)自行去刷新才能更新。在實(shí)際的使用場(chǎng)景中這是一個(gè)可怕的工作量,并且容易出錯(cuò)誤。這里有一個(gè)通用的解決方案,使用spring cloud bus結(jié)合消息中間件,通過(guò)消息通知的方式進(jìn)行配置的刷新。

整體架構(gòu)圖

當(dāng)有配置信息發(fā)生變化的時(shí)候,會(huì)有如下的方式完成配置的刷新和通知

  1. 向配置中心發(fā)送刷新請(qǐng)求 POST /bus/refresh
  2. 配置中心向消息總線(xiàn)發(fā)送消息
  3. 所有的服務(wù)接收消息總線(xiàn)的消息
  4. 服務(wù)向配置中心獲取最新的配置信息從而完成配置的刷新工作

使用和驗(yàn)證步驟

  1. 使用eureka注冊(cè)服務(wù)
  2. 修改配置中心應(yīng)用,提供spring cloud bus的支持:演示項(xiàng)目源碼
  3. 修改各個(gè)服務(wù),提供spring cloud bus的支持:演示項(xiàng)目源碼
  4. 修改配置文件,并提交到git服務(wù)器
  5. 向配置中心提交 POST /bus/refresh
  6. 查看各個(gè)服務(wù)的配置信息,正常情況下應(yīng)該配置生效

配置中心改造

  1. 修改pom.xml增加依賴(lài),這里使用RabbitMq作為消息中間件,遵循amqp標(biāo)準(zhǔn)
        <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>
  1. 配置文件中增加RabbitMq的配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
#spring.rabbitmq.username=linxm
#spring.rabbitmq.password=111111
# 打開(kāi)安全控制,通過(guò)/refresh刷新數(shù)據(jù)
management.security.enabled=false
endpoints.enabled=false
endpoints.refresh.enabled=true
  1. 正確啟動(dòng)之后,可以發(fā)送 POST /bus/refresh 進(jìn)行驗(yàn)證

服務(wù)的改造

與配置中心的改造方法完全一樣!
然后就可以啟動(dòng)服務(wù)進(jìn)行驗(yàn)證了!

注意:
我們可以指定刷新范圍:通過(guò)使用destination參數(shù)

  1. 刷新具體服務(wù)
/bus/refresh?destination=mybusservice1:1811
  1. 刷新某種服務(wù)
/bus/refresh?destination=mybusservice1:**

使用kafka做消息中間件

邏輯上與RabbitMq的方法沒(méi)有區(qū)別

  1. 增加pom.xml依賴(lài)
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
  1. 修改配置文件
# Kafka的服務(wù)端列表,默認(rèn)值localhost
spring.cloud.stream.kafka.binder.brokers=master,backup
# Kafka服務(wù)端的默認(rèn)端口,當(dāng)brokers屬性中沒(méi)有配置端口信息時(shí),就會(huì)使用這個(gè)默認(rèn)端口     
spring.cloud.stream.kafka.binder.defaultBrokerPort=9092
# Kafka服務(wù)端連接的ZooKeeper節(jié)點(diǎn)列表
spring.cloud.stream.kafka.binder.zkNodes=localhost
# ZooKeeper節(jié)點(diǎn)的默認(rèn)端口,當(dāng)zkNodes屬性中沒(méi)有配置端口信息時(shí),就會(huì)使用這個(gè)默認(rèn)端口  
spring.cloud.stream.kafka.binder.defaultZkPort=2181
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容