SpringCloud-動態配置變化監控-獲取變化(支援Config、Nacos)
- 2019 年 10 月 17 日
- 筆記
SpringCloud-動態配置變化監控-獲取變化(支援Config、Nacos)
qq交流群:
812321371
微信交流群:MercyYao
簡介
配置中心有原生的 SpringCloud Config
、中國開源的 阿里 Nacos
、攜程 Apollo
等。
都是配置熱載入的基礎上增加了其他的功能。
配置中心具有配置熱載入,修改配置 -> 推送到程式 -> 執行配置更新。
而獲取配置更新的具體內容,這些組件都沒有做到(SpringCloud Config
、Nacos
, Apollo待驗證
)。如:獲取變化的配置 test
更新前為 123
,更新後為 111
。
SpringCloud Config
、Nacos
、 Apollo待驗證
配置更新都是將整個配置文件推送給服務進行配置對比結果進行更新。這個階段用戶無法從程式中獲取更新的內容。
為了實現這個擴展功能點,更新結果可以讓程式感知。
在這個階段用戶通過code可以實現配置監聽, 監聽到某個配置變化做其他操作等。
示例: 獲取到推送配置變化, 感知到 test
發生變化, 做更新同步數據操作等等。
感知結果集如:
{ `被更新的配置key`:{ before: `原來的值`, after: `更新後的值` }, `被更新的配置key`:{ before: `原來的值`, after: `更新後的值` } }
功能使用
添加依賴
<dependency> <groupId>com.purgeteam</groupId> <artifactId>dynamic-config-spring-boot-starter</artifactId> <version>0.1.0.RELEASE</version> </dependency>
當然實際情況要結合添加動態配置依賴包 SpringCloud Config
、 Nacos
、 Apollo
。
dynamic-config-spring-boot-starter
模組不包含以上依賴, 需要自行添加。
@EnableDynamicConfigEvent
簡介: 開啟這個特性註解,具備配置推送更新監聽能力。
啟動類添加 @EnableDynamicConfigEvent
註解開啟配置變化監聽功能。
@EnableDynamicConfigEvent @SpringBootApplication public class DynamicConfigSpringBootApplication { public static void main(String[] args) { SpringApplication.run(DynamicConfigSpringBootApplication.class, args); } }
編寫事件接收器
創建 NacosListener
(名稱隨意) 實現 ApplicationListener<ActionConfigEvent>#onApplicationEvent
方法
@Slf4j @Component public class NacosListener implements ApplicationListener<ActionConfigEvent> { @Override public void onApplicationEvent(ActionConfigEvent event) { log.info("接收事件"); log.info(event.getPropertyMap().toString()); } }
在 NacosListener#onApplicationEvent
方法里獲取目標值, 作相應的邏輯處理。
ActionConfigEvent event:
public class ActionConfigEvent extends ApplicationEvent { // 事件說明 private String eventDesc; // 更新變化結果集 private Map<String, HashMap> propertyMap; ... }
ActionConfigEvent
主要包含 Map<String, HashMap> propertyMap;
, 從這裡可以獲取更新變化結果, propertyMap結構如下:
{ `被更新的配置key`:{ before: `原來的值`, after: `更新後的值` }, `被更新的配置key`:{ before: `原來的值`, after: `更新後的值` } }
更新配置演示
ps: 示例為 Nacos
其它配置中心無差別。
原始配置:
test.age=18 user.name=purgeyao
修改配置:
# test.age 將18更新為19 test.age=19 user.name=purgeyao
在 NacosListener#onApplicationEvent
方法加入端點調試觀察 ActionConfigEvent
對象參數。
更新的 test.age
已經被記錄在了 ActionConfigEvent.propertyMap
里了, 從 18 更新為 19。
控制台列印:
2019-10-17 10:44:09.221 INFO 54054 --- [-10.1.1.97_8848] c.p.dynamic.config.demo.NacosListener : 接收事件 2019-10-17 10:45:19.752 INFO 54054 --- [-10.1.1.97_8848] c.p.dynamic.config.demo.NacosListener : {test.age={before=18, after=19}}
總結
上述功能基於 Nacos
、 SpringCloud Config
或基於 SpringCloud Config
之上構建的配置中心都可以使用, 其他配置中心待驗證。
qq交流群:
812321371
微信交流群:MercyYao
示例程式碼地址:dynamic-config-spring-boot