springcloud配置動態更新

在實現springcloud的配置中心後,咱們須要考慮的就是動態刷新配置。若是考慮只有一個客戶端,咱們能夠在配置文件發生push操做的時候添加webhook,使用webhook發送刷新的post請求到客戶端。但當客戶端不少的狀況,就須要請求多個客戶端,這是不現實的。因此咱們就想到直接刷新配置中心,直接由配置中心通知各個客戶端獲取最新的配置。下面就記錄一下今天搞了一天的使用springcloud bus整合kafka(或者rabbitmq)實現動態刷新,本地本身搞的玩的,因此是windows環境哈,linux大同小異。由於以前項目就用到kafka,新項目啓動項直接拿過來用,因此就沒使用rabbitmq,想用rabbitmq的同窗能夠另行百度哈。node

1、由於kafka強依賴zookeeper,因此首先要安裝zookeeper和kafkalinux

 安裝zookeeperweb

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

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

  3.在D:\zookeeper-3.4.12下新建文件夾data和log,而後將D:\zookeeper-3.4.12\conf下的zoo_sample.cfg複製一份到當前目錄命名爲zoo.cfg並添加windows

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

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

 安裝kafkapost

  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

        

       消費者便可收到消息:

        

2、更改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

3、重啓config-server和eureka-client項目,而後修改配置文件內容後,用postman調用config-server的bus/refresh請求:配置中心ip:端口/bus/refresh。這個時候能夠發現eureka-client使用的配置是最新的。

注:刷新過程總結下

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

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

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

相關文章
相關標籤/搜索