Spring Cloud 學習紀要五:Bus

Spring Cloud Bus:消息總線

  上一篇我們講到統一配置中心Spring Cloud Config,實現了分佈式項目配置文件的統一管理,但是留下了一個問題:修改配置之後如何免重啓自動生效。Spring Cloud Bus組件就可以用來做這件事,值得注意的是,前面我們所使用的版本Greenwich.M1的bus組件存在bug,我們將config和provider項目改爲如下版本(其他項目建議一併修改):

開發環境 版本
IDEA 2018.2.6
JDK 1.8
Spring Boot 2.0.6
Spring Cloud Finchley.SR2
Docker 18.09.0
RabbitMQ 3.7.8-management

bug官方github issue鏈接爲https://github.com/spring-cloud/spring-cloud-bus/issues/137,可自行查閱。

準備工作

  進行本章內容的學習前期需要準備好環境:Docker的安裝、RabbitMQ容器的安裝和運行、虛擬機IP到宿主機IP的映射等。
  簡而言之,訪問http://localhost:15672,應可以到達RabbitMQ管理界面,當然,5672端口的服務也需要能正常運行。
MQ管理頁面

修改Config項目配置

Maven依賴

  在配置中心項目中添加bus組件的依賴,以及後續會用到的actuator和monitor依賴。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-monitor</artifactId>
</dependency>
<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>

配置

  暴露配置中心的各項接口,在配置文件添加如下內容:

management:
  endpoints:
    web:
      exposure:
        include: "*"

修改provider項目

  我們以provider項目爲例,添加bus組件的Maven依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

  修改接口爲動態讀取配置項:

@RestController
@RequestMapping("/hello")
@RefreshScope // 使用該註解可在SpringCloudConfig配置刷新時自動更新本類配置
public class HelloController {
    @Value("${env}")
    private String env;

    @GetMapping("/chung")
    public String helloChung() {
        return "Hello Chung By Provider on env:" + env;
    }
}

驗證配置項動態更新

  先後運行config和provider項目(保證註冊中心服務可用),發現RabbitMQ自動爲我們創建了兩個消息隊列,如圖所示。
Queue
  此時我們訪問provider的接口http://localhost:8081/hello/chung可以得到Hello Chung By Provider on env:dev,接着我們修改git上的配置文件內容env的值env : devDynamic,然後用postman或curl命令以post方式訪問config暴露的接口http://127.0.0.1:8071/actuator/bus-refresh,RabbitMQ的管理界面可以看到消息的消費情況,如圖所示。
MQ
  最後刷新http://localhost:8081/hello/chung頁面,發現內容變成了Hello Chung By Provider on env:devDynamic,證明我們實現了免重啓修改配置。

配置GitHub的Webhooks

  真實場景下,我們不可能每次修改配置後手動做一下post請求,而Webhook爲我們提供了這樣的功能。
  如果本機IP爲內網地址,可以提前準備一下內網穿透工具,視個人情況而定。
NATAPP
  在我們的配置文件git倉庫中,找到設置頁面的Webhooks選項,將Payload URL設置爲${your_url}/monitor,Content Type選擇application/json,點擊添加Webhook按鈕。
Webhook
  最後我們再修改git上的配置文件內容,稍候幾秒刷新頁面,發現能夠真正實現免重啓自動更新配置,詳細內容和截圖不再贅述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章