我們使用spring cloud做了b2b2c的電子商務系統,除了架構本身自帶的系統服務外,我們将b2b2c的業務服務進行了細粒度拆分,做成了不同的業務微服務。
文章來源
java B2B2C 源碼 多級分銷Springcloud多租戶電子商城系統當我們的業務系統越來越龐大複雜的時候,各種配置也會随之增多。配置檔案隻要一修改,會對commonservice-config配置中心先停止服務,然後再重新啟動,最後使配置生效。
如果服務少,我們可以手動方式來啟動,但是對業務和系統的穩定性肯定有一定的影響。
如果是成百上千的服務都靠手動操作,我估計運維人員或技術人員會瘋掉的。
針對以上問題,commonservice-config服務端和業務微服務分别做了相關的配置,服務端負責将git(svn或本地檔案系統)中存儲的配置檔案進行配置化,業務微服務通過配置從服務端配置中心擷取相關配置,如果配置檔案變動了,通過重新整理業務微服務的方式,将最新的配置資訊擷取。
spring cloud Bus通過一個輕量級消息代理連接配接分布式系統的節點。這可以用于廣播狀态更改(如配置更改)或其他管理指令。
接下來,我們就來實施通過spring cloud Bus方案,動态重新整理服務端配置:
1 建立項目microservice-config-client-refresh-cloud-bus
2 為項目添加spring-cloud-starter-bus-amqp依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
</dependencies>
修改bootstrap.yml内容
spring:
application:
name: microservice-foo # 對應config server所擷取的配置檔案的{application}
cloud:
config:
uri:http://localhost:8080/
profile: dev # profile對應config server所擷取的配置檔案中的{profile}
label: master # 指定Git倉庫的分支,對應config server所擷取的配置檔案的{label}
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
測試
1 啟動microservice-config-server。
2 啟動microservice-config-client-refresh-cloud-bus。
3 将microservice-config-client-refresh-cloud-bus端口改為8082,再啟動一個節點。
4 通路
http://localhost:8081/profile,此時獲得結果:dev-1.0
5 将Git倉庫中的microservice-foo-dev.properties檔案内容修改為profile=dev-1.0-bus
6 發送POST請求到一個Config Client執行個體的/bus/refresh
7 通路兩個Config Client執行個體的/bus/refresh端點,會發現兩個節點都傳回profile=dev-1.0-bus