nacos 自定义服务变化订阅

1.编写自定义的订阅者

这里参考的是InstancesChangeNotifier这个类。


import com.alibaba.nacos.api.naming.listener.NamingEvent;
import com.alibaba.nacos.client.naming.event.InstancesChangeEvent;
import com.alibaba.nacos.common.notify.listener.Subscriber;
import com.alibaba.nacos.common.notify.Event;


public class MyChangeNotifier extends Subscriber<InstancesChangeEvent> {

        @Override
        public void onEvent(InstancesChangeEvent event) {
            // TODO 订阅的服务有变化会触发
            //  这里获取到了服务集群的所有信息,包括服务名称、各节点信息等。
            NamingEvent namingEvent = transferToNamingEvent(event);
        }

        @Override
        public Class<? extends Event> subscribeType() {
            return InstancesChangeEvent.class;
        }

        private NamingEvent transferToNamingEvent(
                InstancesChangeEvent instancesChangeEvent) {
            return new NamingEvent(instancesChangeEvent.getServiceName(), instancesChangeEvent.getGroupName(),
                    instancesChangeEvent.getClusters(), instancesChangeEvent.getHosts());
        }
    }

2.注册自定义的订阅者

// 在项目启动完,或者想注册的时候注册自己的订阅者就行了。
// 注意:多次注册不同的订阅者对象,那就真的会有很多一样的订阅者。多次注册同一个对象没问题。可以理解为往set里加对象
NotifyCenter.registerSubscriber(new MyChangeNotifier());

3.订阅想要订阅的服务

正常项目中用到的其他服务都会自动订阅,如果想额外手动增加订阅的话,最简单的方式可以手动获取一下即可。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Component;

@Component
public class Test {

    @Autowired
    private DiscoveryClient discoveryClient;

    public void test(){
    	// 这里相当于订阅了指定服务 
        discoveryClient.getInstances("service-name");
    }

订阅服务中,真正调用到的是
com.alibaba.nacos.client.naming.NacosNamingService#selectInstances(java.lang.String, java.lang.String, boolean)。
完整的nacos订阅逻辑在com.alibaba.nacos.client.naming.core.HostReactor#getServiceInfo中

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值