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

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

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

前言

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

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

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

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

項(xiàng)目文件說明

以下操作都是在 SpringBoot項(xiàng)目中。以下是部分代碼,完整代碼請(qǐng)?jiān)L問代碼倉庫:

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配置類

主要是讀取配置內(nèi)容,生成類 com.alibaba.nacos.api.config.ConfigService的實(shí)例。

讀取的是 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配置出錯(cuò) {}", e.getMessage());
            return null;
        }
        return configServiceInstance;
    }
}

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

監(jiān)聽到Nacos內(nèi)容發(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配置內(nèi)容發(fā)生更改:{}", configInfo);
    }
}

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

在Nacos中增加配置:

內(nèi)容是一個(gè)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配置錯(cuò)誤,當(dāng)前配置不是一個(gè)有效的JSON");
            return;
        }
        T instance = GsonUtil.fromJson(configInfo, instanceClass);
        log.info("將Nacos配置的json數(shù)據(jù)轉(zhuǎn)換為實(shí)例:{}", instance);
    }
}

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

真實(shí)業(yè)務(wù)場(chǎng)景,可以定制化一個(gè)這樣的類,來做你自己的業(yè)務(wù)。

注冊(cè)監(jiān)聽器

通過配置datId來注冊(cè)對(duì)應(yīng)的監(jiān)聽器:

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

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

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

監(jiān)聽到 json 內(nèi)容,會(huì)校驗(yàn)是不是一個(gè)有效的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)聽器的效果

啟動(dòng)項(xiàng)目后,修改 bussiness-param.json 配置的內(nèi)容:

點(diǎn)擊發(fā)布后,控制臺(tái)會(huì)輸出內(nèi)容:

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

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

相關(guān)文章

  • 解決SpringBoot的@DeleteMapping注解的方法不被調(diào)用問題

    解決SpringBoot的@DeleteMapping注解的方法不被調(diào)用問題

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

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

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

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

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

    Java的關(guān)鍵字與標(biāo)識(shí)符小結(jié)

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

    MyBatis加解密插件的示例詳解

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

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

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

    詳解java如何集成swagger組件

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

    Java中關(guān)于字符串的編碼方式

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

    idea如何自動(dòng)生成serialVersionUID

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

    解決SpringBoot整合RocketMQ遇到的坑

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

最新評(píng)論