2016-07-25 60 views
0

根据此博客https://spring.io/blog/2015/07/14/microservices-with-spring这是基于尤里卡服务发现和服务发现工作正常。春季开机应用的领事服务发现问题

但是,当已经切换到使用领事代替尤里卡服务发现不能正常工作,并收到此错误:

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) ... 

更新:后已通过提供正确的健康检查端点固定先前的错误(见回答以下),在bootstrap.yml部署与领事服务器的正确提供主机和端口到Cloud Foundry服务时(在“引导”阶段加载基于领事PropertySource):

--- 
spring: 
    profiles: cloud 
    cloud: 
    consul: 
     host: <consul host or ip> 
     port: 8500 

领事在注册服务,bu t临界状态(失败)!

希望得到任何帮助或指导。

感谢

+1

如果服务获得成功注册,您是否检查过Consul UI?只是为了消除,如果注册或发现是你的问题。 –

+0

是服务失败(标记为关键)。 – kmarabet

+1

你可能调整了健康检查吗? –

回答

2

的问题涉及到被设置为/健康端点领事健康检查默认路径。 因此,在所有客户端应用程序(网络服务器和微服务)中启用弹簧执行器后,此问题已得到解决。

或者你可以更改bootstrap.yml文件的默认领事健康检查端点:

cloud: 
    consul: 
     discovery: 
     healthCheckPath: /test 

NB。为了使弹簧致动器中行家加入到pom.xml文件以下依赖性:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency> 

更多信息参见:http://cloud.spring.io/spring-cloud-consul/spring-cloud-consul.html

当部署(推动)到CF(CloudFoundry)的的URI部署的应用程序应当提供给领事服务发现过程(CF提供的应用程序的URI的在vcap.application.uris环境变量),因此下面的配置应被添加到bootsrap.yml文件:

--- 
spring: 
    profiles: cloud 
    cloud: 
    consul: 
     host: <consul host or ip> 
     port: 8500 
     discovery: 
     instanceId: ${spring.application.name}:${vcap.application.application_name}:${vcap.application.instance_id} 
     hostname: ${vcap.application.uris[0]} 
     port: 80 

NB. instanceId is used by Consul to register the application (microservice) instance.