为什么 spring 云领事不适用于独立 tomcat?
Why spring cloud consul doesn't work with standalone tomcat?
Spring 当 运行 代码在带有嵌入式 tomcat 的 spring 引导中时,云领事按预期工作。
当我们在独立 tomcat.It 上部署代码时它不起作用似乎有一个 ConsulAutoServiceRegistrationListener
在 WebServerInitializedEvent
上启动 consul 服务注册。此事件仅在我们 运行 在 spring 引导内嵌入 tomcat 代码时触发。
https://github.com/spring-cloud/spring-cloud-consul/issues/302 中提供了一些解决方法,但其中 none 在最新的 Greenwich.RC2
版本中不再有效。
我们可以通过哪些其他方式在独立 tomcat 上启动服务注册?
如果您需要更多详细信息,请告诉我。
我认为你可以设置 spring.cloud.consul.discovery.port=${server.port}
而不需要 setPort()
方法。
这只是一个跟进post,上面的答案仍然有效。今天我遇到了同样的问题,我的 Spring Boot 应用程序没有在 运行 外部 Tomcat 服务器上注册到 Consul。尽管可以根据上面 post 中提到的所有信息提出一个可行的解决方案,但我已在此处提供了所有信息,在一个 post.
中
我确实必须更改 solution code 中的一件事,使用了注释 @AutoConfigurationAfter(...)
。我不得不将其更改为 @AutoConfigureAfter(...)
解决方案
根据 solution code:
,将以下 MyConsulLifecycle
添加到您的申请中
@Configuration
@ConditionalOnConsulEnabled
@ConditionalOnMissingBean(type= "org.springframework.cloud.consul.discovery.ConsulLifecycle")
@AutoConfigureAfter(ConsulAutoServiceRegistrationAutoConfiguration.class)
public class MyConsulLifecycle implements ApplicationContextAware {
private ConsulAutoServiceRegistration registration;
public MyConsulLifecycle(ConsulAutoServiceRegistration registration) {
this.registration = registration;
}
public void setApplicationContext(ApplicationContext context) throws BeansException {
if (registration != null ) {
registration.start();
}
}
}
与他的 post 评论中的 Brian Peterson's solution, the method setPort()
is no longer available. This was already mentioned by Sagar Veeram 相反。
正如spencergibb所说,这可以通过在application.properties
文件中设置spring.cloud.consul.discovery.port=${server.port}
来解决:
server.port=8080
spring.cloud.consul.discovery.port=${server.port}
请注意,使用独立 Tomcat 服务器时需要 server.port
属性 有点奇怪。
Spring 当 运行 代码在带有嵌入式 tomcat 的 spring 引导中时,云领事按预期工作。
当我们在独立 tomcat.It 上部署代码时它不起作用似乎有一个 ConsulAutoServiceRegistrationListener
在 WebServerInitializedEvent
上启动 consul 服务注册。此事件仅在我们 运行 在 spring 引导内嵌入 tomcat 代码时触发。
https://github.com/spring-cloud/spring-cloud-consul/issues/302 中提供了一些解决方法,但其中 none 在最新的 Greenwich.RC2
版本中不再有效。
我们可以通过哪些其他方式在独立 tomcat 上启动服务注册?
如果您需要更多详细信息,请告诉我。
我认为你可以设置 spring.cloud.consul.discovery.port=${server.port}
而不需要 setPort()
方法。
这只是一个跟进post,上面的答案仍然有效。今天我遇到了同样的问题,我的 Spring Boot 应用程序没有在 运行 外部 Tomcat 服务器上注册到 Consul。尽管可以根据上面 post 中提到的所有信息提出一个可行的解决方案,但我已在此处提供了所有信息,在一个 post.
中我确实必须更改 solution code 中的一件事,使用了注释 @AutoConfigurationAfter(...)
。我不得不将其更改为 @AutoConfigureAfter(...)
解决方案
根据 solution code:
,将以下MyConsulLifecycle
添加到您的申请中
@Configuration
@ConditionalOnConsulEnabled
@ConditionalOnMissingBean(type= "org.springframework.cloud.consul.discovery.ConsulLifecycle")
@AutoConfigureAfter(ConsulAutoServiceRegistrationAutoConfiguration.class)
public class MyConsulLifecycle implements ApplicationContextAware {
private ConsulAutoServiceRegistration registration;
public MyConsulLifecycle(ConsulAutoServiceRegistration registration) {
this.registration = registration;
}
public void setApplicationContext(ApplicationContext context) throws BeansException {
if (registration != null ) {
registration.start();
}
}
}
与他的 post 评论中的 Brian Peterson's solution, the method setPort()
is no longer available. This was already mentioned by Sagar Veeram 相反。
正如spencergibb所说,这可以通过在application.properties
文件中设置spring.cloud.consul.discovery.port=${server.port}
来解决:
server.port=8080
spring.cloud.consul.discovery.port=${server.port}
请注意,使用独立 Tomcat 服务器时需要 server.port
属性 有点奇怪。