spring-cloud / spring-cloud/spring-cloud-consul
Serivices won't register automatically when consul-server is started after starting spring-cloud-consul
@Saravana-PS is already working on this.
Since Jun 21, 2023.
- Dominant language
- Java
- Stars
- 822
- Forks
- 539
- Avg merge
- 9h 31m
- Merged PRs (30d)
- 7
Description
Serivices wont register automatically when consul-server is started after starting spring-cloud-consul
version:spring-cloud-consul-discovery 3.1.0
I already configured spring.cloud.consul.discovery.heartbeat like this
spring.cloud.consul.discovery.heartbeat.enabled: true;
spring.cloud.consul.discovery.heartbeat.reregisterServiceOnFailure: true;
spring.cloud.consul.discovery.heartbeat.ttl: 10s;
then I checked the source code and found a bug.
The bug is come from spring-cloud-consul-discovery package's class org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.
In this method public void register(ConsulRegistration reg),the original code is:
@Override
public void register(ConsulRegistration reg) {
log.info("Registering service with consul: " + reg.getService());
try {
this.client.agentServiceRegister(reg.getService(), this.properties.getAclToken());
NewService service = reg.getService();
if (this.heartbeatProperties.isEnabled() && this.ttlScheduler != null && service.getCheck() != null
&& service.getCheck().getTtl() != null) {
this.ttlScheduler.add(reg.getService());
}
}
catch (ConsulException e) {
if (this.properties.isFailFast()) {
log.error("Error registering service with consul: " + reg.getService(), e);
ReflectionUtils.rethrowRuntimeException(e);
}
log.warn("Failfast is false. Error registering service with consul: " + reg.getService(), e);
}
}
than I changed it like this:
@Override
public void register(ConsulRegistration reg) {
log.info("Registering service with consul: " + reg.getService());
try {
this.client.agentServiceRegister(reg.getService(), this.properties.getAclToken());
}
catch (ConsulException e) {
if (this.properties.isFailFast()) {
log.error("Error registering service with consul: " + reg.getService(), e);
ReflectionUtils.rethrowRuntimeException(e);
}
log.warn("Failfast is false. Error registering service with consul: " + reg.getService(), e);
}
try {
NewService service = reg.getService();
if (this.heartbeatProperties.isEnabled() && this.ttlScheduler != null && service.getCheck() != null
&& service.getCheck().getTtl() != null) {
this.ttlScheduler.add(reg.getService());
}
}
catch (ConsulException e) {
if (this.properties.isFailFast()) {
log.error("Error registering service with consul: " + reg.getService(), e);
ReflectionUtils.rethrowRuntimeException(e);
}
log.warn("Failfast is false. Error registering service with consul: " + reg.getService(), e);
}
}
Now when services is not registered successfully,the method will go to an exception,than I will add the registered services into the scheduler.
Maybe you can fix this,thank you.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.