SpringCloud-動態配置變化監控-獲取變化(支持Config、Nacos)

SpringCloud-動態配置變化監控-獲取變化(支持Config、Nacos)

qq交流羣: 812321371
微信交流羣: MercyYao

簡介

配置中心有原生的 SpringCloud Config 、國內開源的 阿里 Nacos、攜程 Apollo 等。
都是配置熱加載的基礎上增長了其餘的功能。git

配置中心具備配置熱加載,修改配置 -> 推送到程序 -> 執行配置更新。github

而獲取配置更新的具體內容,這些組件都沒有作到(SpringCloud ConfigNacos, Apollo待驗證 )。如:獲取變化的配置 test 更新前爲 123 ,更新後爲 111spring

SpringCloud ConfigNacosApollo待驗證 配置更新都是將整個配置文件推送給服務進行配置對比結果進行更新。這個階段用戶沒法從程序中獲取更新的內容。微信

爲了實現這個擴展功能點,更新結果可讓程序感知。
在這個階段用戶經過code能夠實現配置監聽, 監聽到某個配置變化作其餘操做等。maven

示例: 獲取到推送配置變化, 感知到 test 發生變化, 作更新同步數據操做等等。ide

感知結果集如:spring-boot

{
    `被更新的配置key`:{
        before: `原來的值`,
        after: `更新後的值`
    },
    `被更新的配置key`:{
        before: `原來的值`,
        after: `更新後的值`
    }
}

功能使用

添加依賴

ps: 實際version版本請使用最新版
最新版本: Maven Centralspa

<dependency>
  <groupId>com.purgeteam</groupId>
  <artifactId>dynamic-config-spring-boot-starter</artifactId>
  <version>0.1.0.RELEASE</version>
</dependency>

固然實際狀況要結合添加動態配置依賴包 SpringCloud ConfigNacosApollo調試

dynamic-config-spring-boot-starter 模塊不包含以上依賴, 須要自行添加。code

@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 對象參數。

img

更新的 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}}

總結

上述功能基於 NacosSpringCloud Config 或基於 SpringCloud Config 之上構建的配置中心均可以使用, 其餘配置中心待驗證。

qq交流羣: 812321371
微信交流羣: MercyYao

示例代碼地址:dynamic-config-spring-boot

做者GitHub:
Purgeyao 歡迎關注
本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索