pull/1621/head
zihenz 3 months ago
parent 16860d6475
commit 9d90295916

@ -77,7 +77,7 @@ public class PolarisServiceRegistry implements ServiceRegistry<PolarisRegistrati
private final StaticMetadataManager staticMetadataManager; private final StaticMetadataManager staticMetadataManager;
private final PolarisStatProperties polarisStatProperties; private final PolarisStatProperties polarisStatProperties;
private final ScheduledExecutorService heartbeatExecutor; private volatile ScheduledExecutorService heartbeatExecutor;
public PolarisServiceRegistry(PolarisDiscoveryProperties polarisDiscoveryProperties, public PolarisServiceRegistry(PolarisDiscoveryProperties polarisDiscoveryProperties,
PolarisSDKContextManager polarisSDKContextManager, PolarisDiscoveryHandler polarisDiscoveryHandler, PolarisSDKContextManager polarisSDKContextManager, PolarisDiscoveryHandler polarisDiscoveryHandler,
@ -86,16 +86,13 @@ public class PolarisServiceRegistry implements ServiceRegistry<PolarisRegistrati
this.polarisSDKContextManager = polarisSDKContextManager; this.polarisSDKContextManager = polarisSDKContextManager;
this.polarisDiscoveryHandler = polarisDiscoveryHandler; this.polarisDiscoveryHandler = polarisDiscoveryHandler;
this.staticMetadataManager = staticMetadataManager; this.staticMetadataManager = staticMetadataManager;
this.polarisStatProperties = polarisStatProperties;
// Only create heartbeat executor if enabled
if (polarisDiscoveryProperties.getHeartbeatEnabled()) { if (polarisDiscoveryProperties.getHeartbeatEnabled()) {
this.heartbeatExecutor = Executors this.heartbeatExecutor = Executors
.newSingleThreadScheduledExecutor(new NamedThreadFactory("polaris-heartbeat")); .newSingleThreadScheduledExecutor(new NamedThreadFactory("polaris-heartbeat"));
} }
else {
this.heartbeatExecutor = null;
}
this.polarisStatProperties = polarisStatProperties;
} }
@Override @Override
@ -143,11 +140,12 @@ public class PolarisServiceRegistry implements ServiceRegistry<PolarisRegistrati
} }
else { else {
instanceRegisterResponse = providerClient.register(instanceRegisterRequest); instanceRegisterResponse = providerClient.register(instanceRegisterRequest);
InstanceHeartbeatRequest heartbeatRequest = new InstanceHeartbeatRequest(); if (heartbeatExecutor != null) {
BeanUtils.copyProperties(instanceRegisterRequest, heartbeatRequest); InstanceHeartbeatRequest heartbeatRequest = new InstanceHeartbeatRequest();
heartbeatRequest.setInstanceID(instanceRegisterResponse.getInstanceId()); BeanUtils.copyProperties(instanceRegisterRequest, heartbeatRequest);
// Start the heartbeat thread after the registration is successful. heartbeatRequest.setInstanceID(instanceRegisterResponse.getInstanceId());
heartbeat(heartbeatRequest); heartbeat(heartbeatRequest);
}
} }
registration.setInstanceId(instanceRegisterResponse.getInstanceId()); registration.setInstanceId(instanceRegisterResponse.getInstanceId());
LOGGER.info("polaris registry, {} {} {} {}:{} {} {} {} {} register finished", polarisDiscoveryProperties.getNamespace(), LOGGER.info("polaris registry, {} {} {} {}:{} {} {} {} {} register finished", polarisDiscoveryProperties.getNamespace(),
@ -254,10 +252,28 @@ public class PolarisServiceRegistry implements ServiceRegistry<PolarisRegistrati
* @param heartbeatRequest heartbeat request * @param heartbeatRequest heartbeat request
*/ */
public void heartbeat(InstanceHeartbeatRequest heartbeatRequest) { public void heartbeat(InstanceHeartbeatRequest heartbeatRequest) {
// Stop heartbeat if disabled
if (!polarisDiscoveryProperties.getHeartbeatEnabled()) {
if (heartbeatExecutor != null) {
heartbeatExecutor.shutdown();
heartbeatExecutor = null;
}
return;
}
// Don't proceed if executor is null
if (heartbeatExecutor == null) {
return;
}
heartbeatExecutor.scheduleWithFixedDelay(() -> { heartbeatExecutor.scheduleWithFixedDelay(() -> {
try { try {
// If the health check passes, the heartbeat will be reported. // Skip heartbeat if disabled or health check URL is not set
// If it does not pass, the heartbeat will not be reported. if (!polarisDiscoveryProperties.getHeartbeatEnabled() ||
StringUtils.isBlank(polarisDiscoveryProperties.getHealthCheckUrl())) {
return;
}
Map<String, String> headers = new HashMap<>(1); Map<String, String> headers = new HashMap<>(1);
headers.put(HttpHeaders.USER_AGENT, "polaris"); headers.put(HttpHeaders.USER_AGENT, "polaris");
if (!OkHttpUtil.checkUrl(heartbeatRequest.getHost(), heartbeatRequest.getPort(), if (!OkHttpUtil.checkUrl(heartbeatRequest.getHost(), heartbeatRequest.getPort(),

@ -13,6 +13,8 @@ spring:
discovery: discovery:
enabled: true enabled: true
register: true register: true
heartbeat:
enabled: false
contract: contract:
exposure: true exposure: true
report: report:

Loading…
Cancel
Save