【发布时间】:2016-11-28 17:42:30
【问题描述】:
根据这篇博客https://spring.io/blog/2015/07/14/microservices-with-spring,它是基于eureka服务发现的,并且服务发现在哪里正常工作。
但是当切换到使用 Consul 而不是 Eureka 时,服务发现不起作用并出现此错误:
java.lang.IllegalStateException: No instances available for ACCOUNTS-SERVICE
at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:79)
at org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor.intercept(LoadBalancerInterceptor.java:46) ...
更新:通过提供正确的运行状况检查端点(请参阅下面的答案)修复了先前的错误后,在将服务部署到 Cloud Foundry 时,在 bootstrap.yml 中正确提供了 Consul 服务器的主机和端口(基于 Consul PropertySource 在“引导”阶段加载):
---
spring:
profiles: cloud
cloud:
consul:
host: <consul host or ip>
port: 8500
Consul 正在注册服务,但处于临界状态(失败)!
不胜感激任何帮助或指导。
谢谢
【问题讨论】:
-
如果服务注册成功,你检查过 Consul UI 吗?只是为了消除您是否发出注册或发现问题。
-
是的,服务失败(标记为关键)。
-
您是否调整了您的健康检查?
-
是的,谢谢它与设置为 /health 端点的“Consul”健康检查默认路径有关,因此在启用 spring-actuator 后问题得到解决。
-
但是在将服务部署到 Cloud Foundry 时,Consul 正在注册它们,但具有 /health 端点的临界状态(失败)!知道是什么原因造成的吗?
标签: spring-boot cloud-foundry spring-cloud consul