diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java index d3c87480..5b232d9f 100644 --- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java +++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java @@ -177,22 +177,28 @@ public class PolarisServiceRegistry implements ServiceRegistry { * @param heartbeatRequest 心跳请求 */ public void heartbeat(InstanceHeartbeatRequest heartbeatRequest) { - heartbeatExecutor.scheduleWithFixedDelay(new Runnable() { - @Override - public void run() { - try { - String healthCheckUrl = String.format("http://%s:%s%s", heartbeatRequest.getHost(), heartbeatRequest.getPort(), polarisProperties.getHealthCheckUrl()); - //先判断是否配置了health-check-url,如果配置了,需要先进行服务实例健康检查,如果健康检查通过,则进行心跳上报,如果不通过,则不上报心跳 - if (Strings.isNotEmpty(healthCheckUrl) && !OkHttpUtil.get(healthCheckUrl, null)){ - log.error("polaris health check failed"); + heartbeatExecutor.scheduleWithFixedDelay(() -> { + try { + String healthCheckEndpoint = polarisProperties.getHealthCheckUrl(); + //先判断是否配置了health-check-url,如果配置了,需要先进行服务实例健康检查,如果健康检查通过,则进行心跳上报,如果不通过,则不上报心跳 + if (Strings.isNotEmpty(healthCheckEndpoint)) { + if (!healthCheckEndpoint.startsWith("/")) { + healthCheckEndpoint = "/" + healthCheckEndpoint; + } + + String healthCheckUrl = String.format("http://%s:%s%s", heartbeatRequest.getHost(), heartbeatRequest.getPort(), healthCheckEndpoint); + + if (!OkHttpUtil.get(healthCheckUrl, null)){ + log.error("backend service health check failed. health check endpoint = {}", healthCheckEndpoint); return; } - polarisDiscoveryHandler.getProviderAPI().heartbeat(heartbeatRequest); - } catch (PolarisException e) { - log.error("polaris heartbeat[{}]", e.getCode(), e); - } catch (Exception e) { - log.error("polaris heartbeat runtime error", e); } + + polarisDiscoveryHandler.getProviderAPI().heartbeat(heartbeatRequest); + } catch (PolarisException e) { + log.error("polaris heartbeat[{}]", e.getCode(), e); + } catch (Exception e) { + log.error("polaris heartbeat runtime error", e); } }, 0, ttl, TimeUnit.SECONDS); }