我們使用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