springcloud基于consul的ttl健康检查的源码分析

简单梳理源码,欢迎大家讨论,评论,指正。

consul健康检查ttl模式下提到了一个check/pass的接口,这个是应用自己上报的,但是应用时如何上报的呢,本文会进行一下分析。
consul TTL 健康检查源码分析

首先是配置application.yml,heartbeat中的enabled参数设置为true

  cloud:
    consul:
      discovery:
        heartbeat:
          enabled: true
          ttl-value: 5
          ttl-unit: s
        preferIpAddress: true

我用的包是spring-cloud-consul-discovery-1.3.3RELEASE.jar

在org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistryAutoConfiguration这个configuration中定义了ttl上报的定时任务ttlScheduler这个类

@Configuration
@ConditionalOnConsulEnabled
@ConditionalOnProperty(value = "spring.cloud.service-registry.enabled", matchIfMissing = true)
@AutoConfigureBefore(ServiceRegistryAutoConfiguration.class)
public class ConsulServiceRegistryAutoConfiguration {

    @Autowired(required = false)
    private TtlScheduler ttlScheduler;

    @Bean
    @ConditionalOnMissingBean
    public ConsulServiceRegistry consulServiceRegistry(ConsulClient consulClient, ConsulDiscoveryProperties properties,
                                                       HeartbeatProperties heartbeatProperties) {
        return new ConsulServiceRegistry(consulClient, properties, ttlScheduler, heartbeatProperties);
    }

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty("spring.cloud.consul.discovery.heartbeat.enabled")
    public TtlScheduler ttlScheduler(ConsulClient consulClient, HeartbeatProperties heartbeatProperties) {
        return new TtlScheduler(heartbeatProperties, consulClient);
    }

org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry中初始化了ttlScheduler

image.png

org.springframework.cloud.consul.discovery.TtlScheduler这个类定义了一个定时任务
启用一个线程

image.png

线程的run方法中就是checkpass

image.png

定时任务时间间隔interval

image.png

我们可以计算一下定时任务上报的时间间隔:我们参数配置是5s
interval=5 * 2 /3 = 3.333
max=(3.333,1)=3.333
ttlMinus1=5-1=4
min=(4,3.3333)=3.333
最后转换成ms,上报时间就是3333ms,3秒多

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。