开发者社区 > 云原生 > 正文

各位大佬,有人知道Nacos 2.2.0版本里面的client端-->server端的心跳现在是怎?

各位大佬,有人知道Nacos 2.2.0版本里面的client端-->server端的心跳现在是怎么定时发送的嘛,之前是使用 BeatReactor 定时发送的,现在是用Grpc定时推的吧,有人知道具体的代码是那一段嘛?

展开
收起
真的很搞笑 2023-06-21 10:36:44 194 0
1 条回答
写回答
取消 提交回答
  • 在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()方法将其发送到服务端。

    2023-06-21 10:58:34
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
Nacos架构&原理 立即下载
workshop专场-微服务专场-开发者动手实践营-微服务-使用Nacos进行服务的动态发现和流量调度 立即下载
Nacos 启航,发布第一个版本, 云原生时代助力用户微服务平台建设 立即下载