7 nacos注册中心的服务地址动态感知是通过这两种方式实现的

举报
周杰伦本人 发表于 2022/05/14 15:13:38 2022/05/14
【摘要】 7 nacos注册中心之服务地址动态感知服务消费者不仅需要获得服务提供者的地址列表,还需要在服务实例出现异常时监听服务地址的变化。首先怎么实现服务的监听呢?有两种方式来实现服务的监听。 实现监听 调用subscribe方法通过调用subscribe方法实现监听,serviceName为服务名,EventListener为监听到的事件。NamingService接口中的subscribe方法...

7 nacos注册中心之服务地址动态感知

服务消费者不仅需要获得服务提供者的地址列表,还需要在服务实例出现异常时监听服务地址的变化。

首先怎么实现服务的监听呢?有两种方式来实现服务的监听。

实现监听

调用subscribe方法

通过调用subscribe方法实现监听,serviceName为服务名,EventListener为监听到的事件。

NamingService接口中的subscribe方法:

void subscribe(String serviceName, EventListener listener) throws NacosException;

具体调用方式如下:

NamingService naming2 = NamingFactory.createNamingService("127.0.0.1" + ":" + port);

naming2.subscribe(serviceName, new EventListener() {
    @Override
    public void onEvent(Event event) {
        System.out.println(((NamingEvent) event).getServiceName());
        System.out.println(((NamingEvent) event).getInstances());
        instances = ((NamingEvent) event).getInstances();
    }
});

调用selectInstances方法

NamingService接口中的selectInstances方法:

List<Instance> selectInstances(String serviceName, String groupName, List<String> clusters, boolean healthy, boolean subscribe) throws NacosException;

如果subscribe为true,会自动注册监听。

selectInstances(serviceName, clusters, healthy, true)

服务动态感知原理

服务动态感知原理:

nacos中有HostReactor类,用来实现服务的动态更新:

  1. 客户端发起事件订阅后,HostReactor中有UpdateTask线程,每10s发送一次Pull请求,获得服务端最新的地址列表
  2. 服务端与服务提供者的实例之间维持了心跳检测,一旦服务提供者出现异常,则会发送一个Push消息给Nacos客户端,也就是服务消费者
  3. 服务消费者收到请求后,使用HostReactor的processServiceJSON方法解析消息,更新本地服务地址列表。

这就是nacos注册中心服务地址动态感知的基本信息了,希望对大家有所帮助,大家有什么问题也可以给我评论留言哦。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。