各位大佬,有人知道Nacos 2.2.0版本里面的client端-->server端的心跳现在是怎么定时发送的嘛,之前是使用 BeatReactor 定时发送的,现在是用Grpc定时推的吧,有人知道具体的代码是那一段嘛?
在Nacos 2.2.0版本中,客户端到服务端的心跳是使用gRPC实现的。具体的代码实现在com.alibaba.nacos.client.grpc.GrpcNamingServiceProxy
类中的startBeat()
方法中。该方法会启动一个定时任务,定时向服务端发送心跳信息,代码如下:
private void startBeat() {
if (scheduledExecutorService == null) {
scheduledExecutorService = new ScheduledThreadPoolExecutor(1, new NamingThreadFactory("com.alibaba.nacos.client.beat"));
}
scheduledExecutorService.scheduleAtFixedRate(() -> {
try {
BeatInfo beatInfo = new BeatInfo();
beatInfo.setServiceName(namingServiceName);
beatInfo.setIp(ip);
beatInfo.setPort(port);
beatInfo.setCluster(cluster);
beatInfo.setMetadata(getMetadata());
beatInfo.setScheduled(false);
namingGrpcClient.sendBeat(beatInfo);
} catch (Exception e) {
LOGGER.error("[CLIENT-BEAT] failed to send beat: {}", e.getMessage());
}
}, 0, beatInterval, TimeUnit.MILLISECONDS);
}
在该方法中,使用了ScheduledThreadPoolExecutor
来实现定时任务,定时向服务端发送心跳信息。定时任务的间隔时间由beatInterval
参数指定,单位为毫秒。每次发送心跳信息时,会创建一个BeatInfo
对象,并调用namingGrpcClient.sendBeat()
方法将其发送到服务端。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。