服务注册 registerInstance

服务注册的时候,如果实例是临时的(ephemeral=true),则会构造发送心跳包

NacosNamingService.registerInstance

public void registerInstance(String serviceName, String groupName, Instance instance) throws NacosException {String groupedServiceName = NamingUtils.getGroupedName(serviceName, groupName);if (instance.isEphemeral()) { // 临时的BeatInfo beatInfo = beatReactor.buildBeatInfo(groupedServiceName, instance);beatReactor.addBeatInfo(groupedServiceName, beatInfo); // /nacos/v1/ns/instance/beat发送心跳} // addBeatInfo: /nacos/v1/ns/instance/beat?app=unknown&serviceName=DEFAULT_GROUP%40%40nacos-discovery&namespaceId=public&port=8082&clusterName=DEFAULT&ip=169.254.104.253serverProxy.registerService(groupedServiceName, groupName, instance);}

BeatReactor

用于向Nacos服务端发送已注册服务心跳

默认5s执行一次心跳

public void addBeatInfo(String serviceName, BeatInfo beatInfo) {NAMING_LOGGER.info("[BEAT] adding beat: {} to beat map.", beatInfo);String key = buildKey(serviceName, beatInfo.getIp(), beatInfo.getPort());BeatInfo existBeat = null;//fix #1733if ((existBeat = dom2Beat.remove(key)) != null) {existBeat.setStopped(true);}dom2Beat.put(key, beatInfo);executorService.schedule(new BeatTask(beatInfo), beatInfo.getPeriod(), TimeUnit.MILLISECONDS); // period毫秒后执行1次 默认5sMetricsMonitor.getDom2BeatSizeMonitor().set(dom2Beat.size());}

BeatTask

如果服务器返回404,则会向服务器重新注册实例

默认5s执行一次心跳

class BeatTask implements Runnable {BeatInfo beatInfo;public BeatTask(BeatInfo beatInfo) {this.beatInfo = beatInfo;}@Overridepublic void run() {if (beatInfo.isStopped()) {return;}long nextTime = beatInfo.getPeriod(); //periodtry {JsonNode result = serverProxy.sendBeat(beatInfo, BeatReactor.this.lightBeatEnabled); // 发送心跳包 PUT /nacos/v1/ns/instance/beatlong interval = result.get("clientBeatInterval").asLong();boolean lightBeatEnabled = false;if (result.has(CommonParams.LIGHT_BEAT_ENABLED)) {lightBeatEnabled = result.get(CommonParams.LIGHT_BEAT_ENABLED).asBoolean();}BeatReactor.this.lightBeatEnabled = lightBeatEnabled;if (interval > 0) {nextTime = interval;}int code = NamingResponseCode.OK;if (result.has(CommonParams.CODE)) {code = result.get(CommonParams.CODE).asInt();}if (code == NamingResponseCode.RESOURCE_NOT_FOUND) { // 没找到资源Instance instance = new Instance();instance.setPort(beatInfo.getPort());instance.setIp(beatInfo.getIp());instance.setWeight(beatInfo.getWeight());instance.setMetadata(beatInfo.getMetadata());instance.setClusterName(beatInfo.getCluster());instance.setServiceName(beatInfo.getServiceName());instance.setInstanceId(instance.getInstanceId());instance.setEphemeral(true);try {serverProxy.registerService(beatInfo.getServiceName(),NamingUtils.getGroupName(beatInfo.getServiceName()), instance); // 重新向服务器注册实例} catch (Exception ignore) {}}} catch (NacosException ex) {NAMING_LOGGER.error("[CLIENT-BEAT] failed to send beat: {}, code: {}, msg: {}",JacksonUtils.toJson(beatInfo), ex.getErrCode(), ex.getErrMsg());}executorService.schedule(new BeatTask(beatInfo), nextTime, TimeUnit.MILLISECONDS); // 设置下一次执行  nextTime(period)毫秒后执行1次 默认5s}
}

nacos发送beat逻辑相关推荐

  1. 高德地图实现仿qq,微信发送位置功能实现逻辑

    定位获取当前位置 地图中间放置大头针 周边展示位置信息 周边信息点击后的逻辑操作 地图截屏功能实现 发送图片到其他页面或者服务器 获取到信息进行展示 写的不好,勿喷,有疑问可以联系我qq 130888 ...

  2. Nacos心跳检测原理

    工程版本 <spring-boot.version>2.2.6.RELEASE</spring-boot.version> <spring-cloud-alibaba.v ...

  3. nacos的心跳机制

    了解nacos的心跳机制,需要先了解nacos的服务注册原理:可先阅读https://blog.csdn.net/LiaoHongHB/article/details/103993074 当nacos ...

  4. Dubbo 稳定性案例:Nacos 注册中心可用性问题复盘

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | kiritomoe 来源 | 公众号「Kiri ...

  5. nacos 本地测试_Nacos注册中心落地实践

    前言 公司在19年开始推进同城双活架构,未来规划是在南汇机房出现故障时能把所有读流量切到宝山机房,这样至少保证读请求是没问题的;我们的微服务使用的zookeeper来做服务发现, zk由于它的强一致性 ...

  6. 【手把手】教你玩转SpringCloud Alibaba之Nacos

    1.什么是Nacos Nacos(Naming Configuration Service) 是一个易于使用的动态服务发现.配置和服务管理平台,用于构建云原生应用程序.而服务发现是微服务架构中的关键组 ...

  7. 【微服务】Day03(Nacos心跳机制、cart,stock项目业务、Dubbo概述)

    Nacos心跳机制 常见面试题 心跳:周期性的操作,来表示自己是健康可用的机制 注册到Nacos的微服务项目(模块)都是会遵循这个心跳机制的 心跳机制的目的,是每个服务和Nacos保持沟通和交换信息的 ...

  8. 服务注册中心Nacos

    文章目录 一.服务注册中心Nacos最佳实践 1.Nacos注册中心简介 背景分析 Nacos概述 构建Nacos服务 初始化配置 服务启动与访问 2.服务注册与调用入门(重点) 业务描述 生产者服务 ...

  9. Nacos服务注册中心(微服务)

    为什么要用服务注册中心? 在微服务中,首先需要面对的问题就是如何查找服务(软件即服务), 其次就是如何在不同的服务之间进行通信? 如何更好更方便的管理应用中的每一个服务,如何建立各个服务之间联系的纽带 ...

最新文章

  1. 百度大脑发布企业服务解决方案,将 AI 技术落实到细分领域
  2. laravel的redis配置,一直报错Class 'Predis\Client' not found
  3. 物理光学1 波动方程与基础波函数
  4. JavaScript设计模式(一)
  5. Python_列表常用操作
  6. elasticsearch Insert 插入数据和delete 删除数据(Java)
  7. 【图论】【最短路】【SPFA】香甜的黄油 Sweet Butter (luogu 1828)
  8. 计算机辅助与设计专业,计算机辅助设计与制造专业怎么样?
  9. 程序员的数学系列(一)
  10. PMP22年免费补考来袭 | 送上180道历年PMP考试试题及答案解析
  11. 2022-2028全球与中国OCR扫描软件市场现状及未来发展趋势
  12. python股市回测程序
  13. 第九届全国大学生GIS应用技能大赛下午(试题及参考答案含数据)
  14. Java file.encoding
  15. [交流] 新手常见(五国)(-v图)错误解决(原版,破解kernel,补丁kext下载)
  16. 苹果手机上网很慢_手机4G信号满格,上网速度却很慢?原来都是它们在“搞鬼”...
  17. InterValue正式启动主网映射
  18. 低代码助力生产管理:车间管理系统
  19. 【开源】港中文多媒体实验室开源目标跟踪工具箱MMTracking
  20. Electron(基于Vue)中使用IPC

热门文章

  1. Windows每个版本自带的.NET版本,与支持的最高.NET版本
  2. OPENCV CV_64FC1含义
  3. echarts 玫瑰图比例太小显示优化
  4. VS2012序列号,激活码,【旗舰版】
  5. 深圳MPD大会 讲师演讲稿 2014-10
  6. 新手坐高铁怎么找车厢_第一次做高铁怎么找车厢和做位,谢谢大家
  7. Ansys workbench单向流固耦合分析
  8. 下班后我都学了什么 | Python 如何高效的遍历DataFrame?
  9. echarts图表生成图片
  10. openGauss并行解码浅谈