欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nacos作為配置中心注冊監(jiān)聽器方法

 更新時間:2023年02月07日 10:08:37   作者:你家寶寶  
本文主要討論Nacos作為配置中心時,其中配置內容發(fā)生更改時,我們的應用程序能夠做的事。一般使用監(jiān)聽器來實現(xiàn)這步操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧

前言

本文主要討論Nacos作為配置中心時,其中配置內容發(fā)生更改時,我們的應用程序能夠做的事。

一般使用監(jiān)聽器來實現(xiàn)這步操作。

對應的監(jiān)聽器接口是:com.alibaba.nacos.api.config.listener.Listener

接下來看看如何注冊一個監(jiān)聽器。

項目文件說明

以下操作都是在 SpringBoot項目中。以下是部分代碼,完整代碼請訪問代碼倉庫:

https://gitee.com/fengsoshuai/junzi-navigation.git

pom依賴

        <!-- Nacos讀取配置-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2021.1</version>
      </dependency>

bootstrap.yml

spring:
  cloud:
    nacos:
      # nacos配置
      config:
        username: nacos
        password: nacos
        server-addr: localhost:80
        namespace: junzi

# nacos 監(jiān)聽的dataId
nacos:
  listener:
    dataId:
      - bussiness-param.json
      - junzi-navigation.yml

NacosConfig配置類

主要是讀取配置內容,生成類 com.alibaba.nacos.api.config.ConfigService的實例。

讀取的是 bootstrap.yml 中的連接nacos需要的屬性字段。

package org.feng.navigation.config;
import com.alibaba.cloud.nacos.NacosConfigProperties;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import java.util.Properties;
/**
 * Nacos 配置
 *
 * @version V1.0
 */
@Slf4j
@Configuration
public class NacosConfig {
    @Resource
    private NacosConfigProperties nacosConfigProperties;
    @Bean
    public ConfigService configService() {
        Properties properties = new Properties();
        properties.setProperty(PropertyKeyConst.SERVER_ADDR, nacosConfigProperties.getServerAddr());
        properties.setProperty(PropertyKeyConst.NAMESPACE, nacosConfigProperties.getNamespace());
        properties.setProperty(PropertyKeyConst.USERNAME, nacosConfigProperties.getUsername());
        properties.setProperty(PropertyKeyConst.PASSWORD, nacosConfigProperties.getPassword());
        ConfigService configServiceInstance;
        try {
            configServiceInstance = NacosFactory.createConfigService(properties);
        } catch (NacosException e) {
            log.error("初始化Nacos配置出錯 {}", e.getMessage());
            return null;
        }
        return configServiceInstance;
    }
}

監(jiān)聽器實現(xiàn)類-默認實現(xiàn)

監(jiān)聽到Nacos內容發(fā)生更改,只打印日志。

package org.feng.navigation.listener;
import com.alibaba.nacos.api.config.listener.Listener;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.Executor;
/**
 * Nacos 監(jiān)聽器
 *
 * @version V1.0
 */
@Slf4j
public class DefaultNacosConfigListener implements Listener {
    @Override
    public Executor getExecutor() {
        return null;
    }
    @Override
    public void receiveConfigInfo(String configInfo) {
        log.info("Nacos配置內容發(fā)生更改:{}", configInfo);
    }
}

監(jiān)聽器實現(xiàn)類-json配置處理

在Nacos中增加配置:

內容是一個json串:

package org.feng.navigation.listener;
import com.alibaba.nacos.api.config.listener.Listener;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.feng.navigation.common.util.GsonUtil;
import java.util.concurrent.Executor;
/**
 * Nacos 監(jiān)聽json數(shù)據(jù)
 *
 * @version V1.0
 */
@Slf4j
@AllArgsConstructor
public class JsonFileNacosConfigListener<T> implements Listener {
    private Class<T> instanceClass;
    @Override
    public Executor getExecutor() {
        return null;
    }
    @Override
    public void receiveConfigInfo(String configInfo) {
        boolean isJson = GsonUtil.validateJson(configInfo);
        if (!isJson) {
            log.error("Nacos配置錯誤,當前配置不是一個有效的JSON");
            return;
        }
        T instance = GsonUtil.fromJson(configInfo, instanceClass);
        log.info("將Nacos配置的json數(shù)據(jù)轉換為實例:{}", instance);
    }
}

監(jiān)聽JSON配置,可以用來做一些業(yè)務實現(xiàn)。我這里暫是只將其序列化成某個類的實例。然后輸出日志,別的沒做。

真實業(yè)務場景,可以定制化一個這樣的類,來做你自己的業(yè)務。

注冊監(jiān)聽器

通過配置datId來注冊對應的監(jiān)聽器:

# nacos 監(jiān)聽的dataId
nacos:
  listener:
    dataId:
      - bussiness-param.json
      - junzi-navigation.yml

這里通過dataId的后綴,識別到是哪種配置,然后注冊不同的監(jiān)聽器,用以實現(xiàn)不同的處理。

目前監(jiān)聽到 yml 配置,只輸出日志,使用默認監(jiān)聽器。

監(jiān)聽到 json 內容,會校驗是不是一個有效的json文件,然后將其序列化。

package org.feng.navigation.listener;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
/**
 * 菌子Nacos配置監(jiān)聽器
 *
 * @version V1.0
 */
@Data
@Slf4j
@Configuration
public class JunZiNacosConfigListener {
    @Resource
    NacosConfigListenerProperties nacosConfigListenerProperties;
    private static final String GROUP = "junzi";
    @Resource
    private ConfigService configService;
    @PostConstruct
    private void init() throws NacosException {
        List<String> dataIdList = nacosConfigListenerProperties.getDataId();
        log.info("正在監(jiān)聽 group=junzi, nacos.listener.dataId={}", dataIdList);
        for (String dataId : dataIdList) {
            if (dataId.endsWith("yml")) {
                configService.addListener(dataId, GROUP, new DefaultNacosConfigListener());
                continue;
            }
            if (dataId.endsWith("json")) {
                configService.addListener(dataId, GROUP, new JsonFileNacosConfigListener<>(TestParse.class));
            }
        }
    }
    @Data
    @ConfigurationProperties("nacos.listener")
    public static class NacosConfigListenerProperties {
        private List<String> dataId;
    }
    @Data
    public static class TestParse {
        private Long code;
        private String reason;
        private Boolean success;
    }
}

監(jiān)聽器的效果

啟動項目后,修改 bussiness-param.json 配置的內容:

點擊發(fā)布后,控制臺會輸出內容:

o.f.n.l.JsonFileNacosConfigListener.receiveConfigInfo(JsonFileNacosConfigListener.java:37) : ![method=default,businessId=default] 將Nacos配置的json數(shù)據(jù)轉換為實例:JunZiNacosConfigListener.TestParse(code=666666, reason=作者真帥, success=false)

到此這篇關于Nacos作為配置中心注冊監(jiān)聽器方法的文章就介紹到這了,更多相關Nacos注冊監(jiān)聽器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 解決SpringBoot的@DeleteMapping注解的方法不被調用問題

    解決SpringBoot的@DeleteMapping注解的方法不被調用問題

    這篇文章主要介紹了解決SpringBoot的@DeleteMapping注解的方法不被調用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java使用DOM4j實現(xiàn)讀寫XML文件的屬性和元素

    Java使用DOM4j實現(xiàn)讀寫XML文件的屬性和元素

    這篇文章主要為大家詳細介紹了Java使用DOM4j實現(xiàn)讀寫XML文件的屬性和元素,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java Semaphore實現(xiàn)高并發(fā)場景下的流量控制

    Java Semaphore實現(xiàn)高并發(fā)場景下的流量控制

    在java開發(fā)的工作中是否會出現(xiàn)這樣的場景,你需要實現(xiàn)一些異步運行的任務,該任務可能存在消耗大量內存的情況,所以需要對任務進行并發(fā)控制。本文將介紹通過Semaphore類優(yōu)雅的實現(xiàn)并發(fā)控制,感興趣的可以了解一下
    2021-12-12
  • Java的關鍵字與標識符小結

    Java的關鍵字與標識符小結

    這篇文章主要介紹了Java的關鍵字與標識符,總結整理了Java各種常見的關鍵字與標識符功能、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • MyBatis加解密插件的示例詳解

    MyBatis加解密插件的示例詳解

    本文介紹了使用?MyBatis?插件實現(xiàn)數(shù)據(jù)庫字段加解密的探索過程,實際開發(fā)過程中需要注意的細節(jié)比較多,整個流程下來我對?MyBatis?的理解也加深了,對MyBatis加解密插件感興趣的朋友跟隨小編一起看看吧
    2022-08-08
  • SpringBoot 統(tǒng)一請求返回的實現(xiàn)

    SpringBoot 統(tǒng)一請求返回的實現(xiàn)

    這篇文章主要介紹了SpringBoot 統(tǒng)一請求返回的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 詳解java如何集成swagger組件

    詳解java如何集成swagger組件

    今天給大家?guī)淼氖顷P于Java的相關知識,文章圍繞著java如何集成swagger組件展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java中關于字符串的編碼方式

    Java中關于字符串的編碼方式

    這篇文章主要介紹了Java中關于字符串的編碼方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • idea如何自動生成serialVersionUID

    idea如何自動生成serialVersionUID

    這篇文章主要介紹了idea如何自動生成serialVersionUID,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 解決SpringBoot整合RocketMQ遇到的坑

    解決SpringBoot整合RocketMQ遇到的坑

    這篇文章主要介紹了解決SpringBoot整合RocketMQ遇到的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論