Регистрация приложения весенней загрузки с помощью consul после загрузки службы

У меня есть устаревший код, в котором приложение весенней загрузки регистрируется консулом после загрузки службы. Приложение автоматически подключает компонент Spring Bean ConsulLifecycle, с помощью которого оно регистрирует / отменяет регистрацию службы в consul, используя свои встроенные методы ConsulLifecycle.start () и ConsulLifecycle.stop ().

Теперь мы обновили Spring до 5.1.5, spring-cloud-starter-consul-discovery до 2.1.1 и spring-cloud-dependencies до Greenwich.RELEASE, в котором компонент ConsulLifecycle удален. Поэтому для достижения того же поведения я пытаюсь автоматически подключить Spring bean-компонент ConsulAutoServiceRegistration и использовать его метод start и stop для регистрации и отмены регистрации службы с помощью consul.

Проблема в том, что теперь, когда я пытаюсь запустить приложение весенней загрузки, я получаю некоторую ошибку при загрузке приложения (ошибка, упомянутая в последнем разделе сообщения).

Примечание: у меня есть файл application.properties, в котором я определил это свойство

spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500     
##Embedded Tomcat 
server.port = 8091
server.address = 0.0.0.0

Ошибка, с которой я сталкиваюсь при загрузке приложения, то есть при регистрации службы у консула

2:25 - Unknown error occured.
java.lang.IllegalArgumentException: service.port has not been set
    at org.springframework.util.Assert.notNull(Assert.java:198)
    at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.getRegistration(ConsulAutoServiceRegistration.java:56)
    at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.getRegistration(ConsulAutoServiceRegistration.java:32)
    at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:117)
    at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.start(ConsulAutoServiceRegistration.java:68)
at com.bmc.agent.data.refresh.manager.core.ConsulLeaderElectionHelper.checkAndGetLocalService(ConsulLeaderElectionHelper.java:201)
at com.bmc.agent.data.refresh.manager.core.ConsulLeaderElectionHelper.run(ConsulLeaderElectionHelper.java:152)

person Programmer    schedule 20.05.2019    source источник
comment
Почему вы вообще делаете регистрацию вручную? Включение должно быть достаточно для его автоматической регистрации. Также тот факт, что он устарел, не означает, что вы все еще не можете его использовать.   -  person M. Deinum    schedule 20.05.2019
comment
Позвольте мне отредактировать свои комментарии, он не устарел, но удален. Что касается ручной регистрации: это более старая реализация, и я не хочу ее менять   -  person Programmer    schedule 20.05.2019
comment
Единственное изменение - удалить его и добавить аннотацию для автоматической регистрации (которая будет вызывать тот же код afaik).   -  person M. Deinum    schedule 20.05.2019


Ответы (1)


Ваш application.properties также должен иметь следующие свойства:

spring.cloud.consul.discovery.healthCheckPath=${spring.application.name}/ManagementEndPoints/health
spring.cloud.consul.discovery.healthCheckInterval=5s
spring.cloud.consul.discovery.instance-id=${spring.application.name}
spring.cloud.consul.discovery.scheme=http or https
spring.cloud.consul.discovery.hostname=${spring.application.name}
spring.cloud.consul.discovery.port=${server.port}
person Halim    schedule 15.01.2020