写点什么

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

作者:周杰伦本人
  • 2022 年 7 月 20 日
  • 本文字数:904 字

    阅读完需:约 3 分钟

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 注册中心服务地址动态感知的基本信息了,希望对大家有所帮助,大家有什么问题也可以给我评论留言哦。


❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:


  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏

  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。

发布于: 刚刚阅读数: 5
用户头像

还未添加个人签名 2020.02.29 加入

公众号《盼盼小课堂》,多平台优质博主

评论

发布
暂无评论
nacos注册中心之服务地址动态感知_7月月更_周杰伦本人_InfoQ写作社区