From b3a2017961fff936acfa4ba312a5d1e8344bf124 Mon Sep 17 00:00:00 2001 From: zihenz <1290829032@qq.com> Date: Mon, 28 Jul 2025 22:33:53 +0800 Subject: [PATCH] fix: restore OkHttpUtil.checkUrl health check logic and optimize heartbeat control --- .../registry/PolarisServiceRegistry.java | 42 ++++++++++++++++--- .../src/main/resources/application.yml | 5 ++- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java index cac68186b..1dda3d9b5 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.StaticMetadataManager; @@ -130,17 +131,48 @@ public class PolarisServiceRegistry implements ServiceRegistry { + try { + boolean canSendHeartbeat = true; + if (StringUtils.isNotBlank(healthCheckUrl)) { + Map headers = new HashMap<>(1); + headers.put(HttpHeaders.USER_AGENT, "polaris"); + canSendHeartbeat = OkHttpUtil.checkUrl( + instanceRegisterRequest.getHost(), + instanceRegisterRequest.getPort(), + healthCheckUrl, + headers + ); + } + if (!canSendHeartbeat) { + LOGGER.warn("Health check failed, skip heartbeat this round. health check endpoint = {}", healthCheckUrl); + return; + } + InstanceHeartbeatRequest heartbeatRequest = new InstanceHeartbeatRequest(); + BeanUtils.copyProperties(instanceRegisterRequest, heartbeatRequest); + heartbeatRequest.setInstanceID(instanceRegisterResponse.getInstanceId()); + providerClient.heartbeat(heartbeatRequest); + LOGGER.debug("Polaris heartbeat is sent successfully."); + } catch (Exception e) { + LOGGER.error("Polaris heartbeat runtime error", e); + } + }, + polarisDiscoveryProperties.getHeartbeatInterval(), + polarisDiscoveryProperties.getHeartbeatInterval(), + TimeUnit.SECONDS); } registration.setInstanceId(instanceRegisterResponse.getInstanceId()); diff --git a/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-a/src/main/resources/application.yml b/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-a/src/main/resources/application.yml index 5137fc5f7..b7f5ec17f 100644 --- a/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-a/src/main/resources/application.yml +++ b/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-a/src/main/resources/application.yml @@ -13,8 +13,9 @@ spring: discovery: enabled: true register: true - heartbeat: - enabled: true + heartbeat-enabled: false + heartbeat-interval: 5 + health-check-url: /actuator/health contract: exposure: true report: