Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Serivices won't register automatically when consul-server is started after starting spring-cloud-consul #774

Open
cooolcai opened this issue Apr 2, 2022 · 3 comments

Comments

@cooolcai
Copy link

cooolcai commented Apr 2, 2022

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.

@spencergibb
Copy link
Member

PRs welcome

@Saravana-PS
Copy link

Hey @spencergibb , I would like to work on this issue. Can you please assign it on me?

@Saravana-PS
Copy link

Hey @spencergibb , I have few queries regarding the local setup of the project. Can we talk about this in a slack kinda environment?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants