SpringCloud 微服務 (九) Spring Cloud Bus

本篇結合上篇學習使用SpringCloud Bus結合MQ來實現自動刷新java

上篇有遠端git碼雲,本地git,config統一配置中心服務,order服務,product服務git

過程: 啓動服務時,config服務將遠端git的配置拉取到本地git,order服務讀取config服務的配置; 啓動後再修改git的配置,order中讀取的配置則不變,爲啓動時的配置,因此須要重啓,從新讀取,由於沒有應用通知order服務配置已經被改動了github

 

消息隊列有不少,本次使用RabbitMQ,就像JPA來操做數據庫,SpringCloud Bus來操做RabbitMQweb

config服務,order服務會經過RabbitMQ來傳遞信息,通知他配置已經被改動spring

這邊還須要使用到docker容器技術,而且在docker中已經下了鏡像RibbonMQ,若是不熟悉的小夥伴能夠先學習一下docker,仍是比較簡單入手,另外docker對於如今的技術人員來講,也必需要知道,熟悉的一個技術工具,否則就落後了,好比在下,也是剛剛以前才知道這玩意docker

也粗糙的記錄了一篇win7的docker安裝 : http://www.javashuo.com/article/p-hkyrgqaw-et.html數據庫

config 服務瀏覽器

第一步老套路,maven引入依賴app

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

第二步yml配置,在原來的基礎上加rabbitmq配置maven

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/daxia/spring-cloud-config
          username: daxia@foxmail.com
          password: 123456
          basedir: E:\MyCloud\config\basedir
  rabbitmq:
    host: 192.168.99.100
    port: 5672
    username: guest
    password: guest
    virtual-host: /

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

 

docker 容器

啓動RabbitMQ命令 : docker run -d --hostname myrabbitmq -p 5672:5672 -p 15672:15672 hub.c.163.com/library/rabbitmq:management

第一個5672端口是rabbitmq,第二個15672端口是管理界面

外部瀏覽器訪問 以下: 

 

order 服務

order服務同config服務同樣,引入依賴,而後yml配置,貼出來

spring:
  application:
    name: order
  cloud:
    config:
      discovery:
        enabled: true
        service-id: CONFIG
      profile: dev
  rabbitmq:
    host: 192.168.99.100
    port: 5672
    username: guest
    password: guest
    virtual-host: /

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

 

而後rabbitmq management訪問,以下 就出現兩個隊列,一個是config,一個是order:

當關閉一個服務的時候,這邊馬上少一個queues,能夠試試

 

下面來測試測試 改變Git倉庫的配置來自動更新服務

在Git倉庫的order-dev.yml中 追加點東西:

hello: 
  tom

在config服務中,須要在yml配置中加入監控設置(這個設置是SpringBoot2有改動部分)

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/daxia/spring-cloud-config
          username: daxia@foxmail.com
          password: 123456
          basedir: E:\MyCloud\config\basedir
  rabbitmq:
    host: 192.168.99.100
    port: 5672
    username: guest
    password: guest
    virtual-host: /

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
#本次追加
management:
  endpoints:
    web:
      exposure:
        include: "bus-refresh"

接下來,在order服務中,寫一個Controller中獲取該配置,須要@RefreshScope註解刷新

@RestController
@RefreshScope
public class HelloController {

    @Value("${hello}")
    private String hello;

    @GetMapping("/hello")
    public String hello() {
        return hello;
    }
}

啓動服務 瀏覽器訪問 上面的接口,

接下來, 去改動Git倉庫的配置,將tom改爲jerry,而後再訪問瀏覽器的時候,發現沒有變,在這裏須要用到上面設置的監控,在config服務控制檯中能夠找到訪問方式http://localhost:8000/actuator/bus-refresh

是post的請求,使用postman訪問一次之後,再來刷新瀏覽器hello的請求,就更新了配置信息

 

學到這裏,我以爲有點尷尬,配置自動刷新了,那每次還要本身請求一個post,確定有方法,從Git倉庫入手,

那git上應該有作了修改自動響應的功能的應用(碼雲)WebHooks

其餘的Git倉庫應該都有,可能名字叫法不同

上面的解釋說的很清楚,push代碼,能夠post一個請求,恰好能夠知足需求

訪問的地址是: http://localhost:8000/actuator/bus-refresh

localhost確定是寫不上去的,若是寫上去了就說明你超神了,這邊須要一個公網的地址

須要內網穿透的小工具,來完成此次測試,映射url到本地,(分享natapp.cn,根據本身的系統下載)

用其餘穿透工具的也能夠,好比花生殼...百度搜內網穿透,就一大堆了

最後測試的時候,發現開源中國的碼雲和SpringCloud彷佛不太兼容,失敗了, 換成github就能夠了.

在使用github的時候,cloud專用的一個訪問/monitor 好比url: http://hello.natappfree.cc/monitor

換成github的時候,須要將以前conifg服務中的basebir文件夾刪除,否則測試的時候,會很坑

 

 

-----------------------------------------------------------

相關文章
相關標籤/搜索