nacos 监听配置文件变动(自动刷新),监听服务变动(权重、元数据等),手动推送服务

这篇具有很好参考价值的文章主要介绍了nacos 监听配置文件变动(自动刷新),监听服务变动(权重、元数据等),手动推送服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

NACOS 配置文件与服务监听

对于启动项目时可以检测的配置文件,修改配置文件时也可进入监听,对于服务监听时,项目启动时注册进nacos可以监听,修改服务时关闭服务时都可以监听,也可以手动推送服务到nacos上。

添加nacos相关的配置文件:

     <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-spring-context</artifactId>
            <version>0.3.6</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>

修改配置文件,链接nacos

nacos上的配置文件名称为:服务名称-dev.yaml
bootstrap.yml文章来源地址https://www.toymoban.com/news/detail-619097.html


spring:
  application:
    name: 服务名称
  profiles:
    active: dev
  cloud:
    nacos:
       //服务相关
      discovery:
        server-addr: IP:8848
        //注册服务时添加元数据
        metadata:
          sort: 9090
      //配置文件相关
      config:
        server-addr: IP:8848
        file-extension: yaml
        group: DEFAULT_GROUP

编写配置类,监听服务与配置文件

package com.zaz.weifuwu.config;

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.annotation.NacosProperties;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.AbstractListener;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscovery;
import io.micrometer.core.instrument.util.JsonUtils;
import jdk.nashorn.internal.ir.annotations.Reference;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.yaml.snakeyaml.Yaml;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

@Configuration
@Slf4j
@EnableNacosDiscovery(globalProperties = @NacosProperties(serverAddr = "IP:8848"))
@Reference
public class NacosConfig implements InitializingBean, DisposableBean {


    private String dataId = "application-dev.yaml";
    private String serverAddr = "IP:8848";
    private String group = "DEFAULT_GROUP";
    private String namespace;
    
    @NacosInjected
    private NamingService namingService;  //服务注册功能的Service
    
    private ConfigService configService;
    public NacosConfig() throws NacosException {
    }

    @PostConstruct
    public void init() {
    }

    @Override
    public void destroy() throws Exception {
        configService.shutDown();
    }
    @Override
    public void afterPropertiesSet() throws Exception {


        //启动配置文件时监听
        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
//        properties.put("namespace", namespace);
        ConfigService configService = NacosFactory.createConfigService(properties);
        configService = NacosFactory.createConfigService(properties);

        try {
            //修改配置文件时监听
            configService.addListener(dataId, group, new AbstractListener() {
                @Override
                public void receiveConfigInfo(String configInfo) {
                    Yaml yaml = new Yaml();
                    Map load = yaml.load(configInfo);
                    log.info("监听到最新的配置文件信息:{}", JsonUtils.obj2Json(load));
                    //获取配置文件中的某一项值
                    Integer choose = (Integer) load.get("choose");
                }
            });
        } catch (NacosException e) {
            log.error(ExceptionUtils.getStackTrace(e));
        }

        try {
            //监听服务(启动,修改,关闭都会监听到)
            NamingService namingService = NamingFactory.createNamingService("IP:8848");
            namingService.subscribe("要监听的服务名", "DEFAULT_GROUP", event -> {
                List<Instance> allInstances = null;
                try {
                    //获取所有该服务的列表
                    allInstances = namingService.getAllInstances("要监听的服务名");
                    
                    //如果是要修改某服务便可直接用上面的所有列表即可   如果么有可以新建Instance进行推送
                    //手动推送服务
                    Instance instance=new Instance ();
                    instance.setClusterName("TestCluster");  //集群名称
                    instance.setEnabled(true);   //是否启用
                    instance.setEphemeral(true);  //临时节点/持久化节点, CP(Raft), AP(Distro)
                    instance.setIp("localhost");
                    instance.setPort(8848);
                    instance.setWeight(10);  //1~100
                    Map<String,String > map =new HashMap<>();
                    map.put("post","9090");
                    //添加元数据
                    instance.setMetadata(map);
                    try {
                        //推送到该服务名下
                        namingService.registerInstance("SpringBoot-Nacos",instance);
                    } catch (NacosException e) {
                        e.printStackTrace();
                    }
                    
                    
                } catch (NacosException e) {
                    e.printStackTrace();
                }
            });

        } catch (NacosException e) {
            log.error(e.getMessage(), e);
        }
    }
}

手动注册服务到nacos

    @NacosInjected
    private NamingService namingService;  //服务注册功能的Service
    
    @PostMapping("push")
    public void Push(String name,String ip,Integer post,Integer weight,String ServerName){
        Instance instance=new Instance ();
        instance.setClusterName(name);  //集群名称
        instance.setEnabled(true);   //是否启用
        instance.setEphemeral(true);  //临时节点/持久化节点, CP(Raft), AP(Distro)
        instance.setIp(ip);
        instance.setPort(post);
        instance.setWeight(weight);  //1~100

        try {
            //推送到该服务名下
            namingService.registerInstance("ServerName",instance);
        } catch (NacosException e) {
            e.printStackTrace();
        }
    }

JsonUtils

package com.util;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.Map;

/**
 * @Description json工具类
 */
public class JsonUtils {
	private static Gson gson = new Gson();
	/**
	 * 
	 * @param jsonclass
	 * @param json
	 * @return
	 */
	public static Object json2Obj(Class<Object> jsonclass, String json) {
		Object obj = null;
		obj = gson.fromJson(json, jsonclass);
		return obj;

	}

	public static String obj2Json(Object obj) {

		String jsonStr = gson.toJson(obj);

		return jsonStr;
	}

	public static <T> T json2Obj(String json,Type tp) {

		T obj = gson.fromJson(json, tp);

		return obj;
	}
	
	public static <T> T json2Obj(String json,Class<T> tp) {

		T response = gson.fromJson(json, tp);

		return response;
	}
	
	public static Map<String,String> json2Map(String json) {

		Type tp = new TypeToken<Map<String,String>>() {}.getType();

		return gson.fromJson(json, tp);
	}
	
	public static String ObjectToJson(Object obj){
		 GsonBuilder gb =new GsonBuilder();
		 gb.disableHtmlEscaping();
		 gb.create().toJson(obj);
		 return gb.create().toJson(obj);
	}

}

到了这里,关于nacos 监听配置文件变动(自动刷新),监听服务变动(权重、元数据等),手动推送服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot git配置文件自动刷新失败问题排查

    ​​​​​​​http://{ip}:{port}/refresh 刷新配置接口如上  说明:当前项目springBoot版本是1.5.9,接口路径与2.x不同 路径区别:/refresh  VS / actuator/refresh 用postman调用refresh接口刷新git配置,报错如下,没有权限 在服务本地启动,调用refresh接口,日志如下: 2024-01-08 15:18:25.663 [IN

    2024年01月22日
    浏览(28)
  • Spring Boot如何实现配置文件的自动加载和刷新?

    在使用Spring Boot开发应用程序时,配置文件是非常重要的组成部分。在不同的环境中,我们可能需要使用不同的配置文件,例如在开发、测试和生产环境中使用不同的配置文件。而且,当我们更改配置文件时,我们希望应用程序能够自动加载和刷新配置文件,而无需重启应用

    2024年02月07日
    浏览(50)
  • 关于安卓媒体资源变动监听(ContentResolver)应用

    背景 媒体监听,是一个很常见的功能,例如手机自带的图库,监听到了拍照图片的生成,就会自动刷新一下图库,用于及时向用户展示最新的数据,还如聊天页面中,监听到相册有新的图片,则有个小弹窗询问用户是否发送该拍摄的图片等等。 !!!代码放文末!!!! 本

    2024年02月03日
    浏览(22)
  • Nacos-04-@RefreshScope自动刷新原理

    Nacos做配置中心的时候,配置数据的交互模式是有服务端push推送的,还是客户端pull拉取的? 短轮询 不管服务端的配置是否发生变化,不停发起请求去获取配置,比如支付订单场景中前端JS不断轮询订单支付的状态 这样的坏处显而易见,由于配置并不会频繁发生变更,如果是

    2024年02月05日
    浏览(26)
  • 04 业务服务注册到 nacos 默认权重为0, 导致 gateway 获取不到业务服务

    最近搭建 xxx服务 的时候碰到了一个这样的问题  某业务服务 启动之后, 注册到 nacos, 然后 从 gateway 来获取该服务却报错, 没有找到 xxx服务  之前 记录了一个 todo, 今天 来梳理一下  主要是会涉及到我们关注的问题, 以及 服务的注册流程 不会大而全  根据服务查询 服务实例

    2023年04月08日
    浏览(25)
  • Nacos配置文件管理、微服务获取Nacos配置文件、热更新、配置共享、配置优先级等

    传统项目中,当我们需要修改配置文件时,需要修改配置文件,停掉服务,重启服务,这样不利于提升用户体验; 而使用Nacos进行项目的配置文件管理,则可以实现热更新配置文件,在Nacos中修改之后,Nacos会通知项目新的配置文件。 添加配置文件 第一步,点击添加配置:

    2023年04月11日
    浏览(31)
  • Nacos(一):简介 如何安装 服务注册与发现 集群 权重 与Eureka区别

    当服务调用越来越多,服务的地址需要管理起来,并实现动态调用而不是硬编码在接口中。此时需要一个注册中心来帮助我们管理服务。    流程如下: 商品微服务注册IP和端口到注册中心 订单微服务先从注册中心获取到商品微服务的IP和端口 订单微服务中使用获取到的IP和

    2024年02月13日
    浏览(42)
  • Nacos配置中心中配置文件的创建、微服务读取nacos配置中心

    在企业项目中会有非常多的服务,不同的开发环境还有不同的配置文件,所以就导致配置文件非常多。 那么肯定就会有一些公共配置,多个服务都是使用过一样的,那么就可以使用配置中心来进行统一管理,避免修改一个配置项要去各个服务都改一遍。 使用传统方式的配置

    2024年02月02日
    浏览(30)
  • 实现Nacos属性值自动刷新的三种方式

    在Spring Boot项目中,我们经常使用Nacos作为配置中心,用于管理应用程序的属性配置。当我们在Nacos上修改属性值时,希望应用程序能够自动刷新并应用最新的属性值,以避免重启应用。本篇博客将介绍三种实现Nacos属性值自动刷新的方式,并提供相应的示例代码。 @RefreshScop

    2024年02月12日
    浏览(25)
  • 【微服务】Nacos集群搭建以及加载文件配置

    🔎这里是【微服务】,关注我学习微服务不迷路 👍如果对你有帮助,给博主一个免费的点赞以示鼓励 欢迎各位🔎点赞👍评论收藏⭐️ 【微服务】 目前主要更新微服务,一起学习一起进步。 本期主要介绍Nacos集群搭建以及加载文件配置 目录 服务集群 需求 搭建 测试 加载

    2024年01月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包