springcloud配置動態更新


在實現springcloud的配置中心后,我們需要考慮的就是動態刷新配置。如果考慮只有一個客戶端,我們可以在配置文件發生push操作的時候添加webhook,使用webhook發送刷新的post請求到客戶端。但當客戶端很多的情況,就需要請求多個客戶端,這是不現實的。所以我們就想到直接刷新配置中心,直接由配置中心通知各個客戶端獲取最新的配置。下面就記錄一下今天搞了一天的使用springcloud bus整合kafka(或者rabbitmq)實現動態刷新,本地自己搞的玩的,所以是windows環境哈,linux大同小異。因為之前項目就用到kafka,新項目啟動項直接拿過來用,所以就沒使用rabbitmq,想用rabbitmq的同學可以另行百度哈。

一、因為kafka強依賴zookeeper,所以首先要安裝zookeeper和kafka

 安裝zookeeper

  1.下載壓縮包https://www.apache.org/dyn/closer.cgi/zookeeper並解壓到D盤,我下載的是最新的穩定版zookeeper-3.4.12.tar.gz

  2.修改環境變量,添加變量ZOOKEEPER_HOME變量值D:\zookeeper-3.4.12  修改變量Path變量值添加%ZOOKEEPER_HOME%\bin;

  3.在D:\zookeeper-3.4.12下新建文件夾data和log,然后將D:\zookeeper-3.4.12\conf下的zoo_sample.cfg復制一份到當前目錄命名為zoo.cfg並添加

    dataDir=D:/zookeeper-3.4.12/data
    dataLogDir=D:/zookeeper-3.4.12/log

  4.用管理員身份打開cmd窗口,輸入zkServer,即啟動zk服務

 安裝kafka

  1.下載壓縮包http://kafka.apache.org/downloads任意下載二進制文件並解壓到D盤,我下載的是kafka_2.12-1.1.0。

  2.在kafka目錄下新建文件夾kafka_logs,然后打開config目錄下的server.properties配置文件,修改log.dirs=D:/kafka_2.12-1.1.0/kafka_logs。

  (有的文章里有說要執行bin\windows\zookeeper-server-start.bat config\zookeeper.properties,這是在第一步中沒有cmd運行zkServer,如果有運行,這里就不需要這一步了)

  3.打開cmd窗口在kafka目錄下輸入bin\windows\kafka-server-start.bat config\server.properties啟動kafka。

  4.再打開一個cmd窗口(第三個了),在kafka目錄下輸入bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testNew創建topic,創建成功是這個樣子:

    

  5.繼續輸入bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic testNew創建生產者

  6.再打開一個cmd窗口(第四個額),再kafka目錄下輸入bin\windows\kafka-console-consumer.bat --zookeeper localhost:2181 --topic testNew --from-beginning創建消費者

  7.測試,在生產者輸入,在消費者可以顯示

    例如:生產者輸入welcome to kafka

        

       消費者即可收到消息:

        

二、更改config-server項目和eureka-client項目(可以是config-client,一樣,我只是把eureka-client改造成了config-client)

 config-server改造:

  1.pom添加依賴:   

1        <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-starter-actuator</artifactId>
4         </dependency>
5         <!-- kafka依賴 -->
6         <dependency>
7             <groupId>org.springframework.cloud</groupId>
8             <artifactId>spring-cloud-starter-bus-kafka</artifactId>
9         </dependency>

  2.application.properties配置文件添加:

1 spring.cloud.stream.kafka.binder.zk-nodes=localhost:2181
2 spring.cloud.stream.kafka.binder.brokers=localhost:9092
3 management.security.enabled=false

eureka-client改造:
  1.pom添加依賴:

1        <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-starter-actuator</artifactId>
4         </dependency>
5         <!-- kafka依賴 -->
6         <dependency>
7             <groupId>org.springframework.cloud</groupId>
8             <artifactId>spring-cloud-starter-bus-kafka</artifactId>
9         </dependency>

  2.獲取配置的controller上添加注解:@RefreshScope

三、重啟config-server和eureka-client項目,然后修改配置文件內容后,用postman調用config-server的bus/refresh請求:配置中心ip:端口/bus/refresh。這個時候可以發現eureka-client使用的配置是最新的。

注:刷新過程總結下

  1.config-server接收到bus/refresh請求后會下載最新配置並通知消息總線bus

  2.消息總線通知各個客戶端配置有更新

  3.各個客戶端會重新請求config-server獲取最新配置

 

  

  

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM