我有一个服务 owner-consumer-service
,它与另一个服务 owner-service
对话 . 我正在使用Eureka服务器进行服务注册 .
owner-consumer-service
具有带有 @LoadBalanced
注释的 RestTemplate
. RestTemplate调用 owner-service
并返回响应 . 我正在使用尤里卡丝带 .
在本地机器上一切正常 .
-
这两项服务均在尤里卡注册 .
-
能够直接拨打
owner-service
-
能够通过
owner-consumer-service
致电owner-service
然后我在PCF上部署了所有服务和Eureka服务器 .
-
这两项服务均在尤里卡注册 .
-
能够直接拨打
owner-service
-
Unable to call owner-service through owner-consumer-service
日志表明 owner-consumer-service
能够解析 owner-service
的主机名,但是restTemplate没有使用该主机名 owner-service
来进行调用,而是导致错误 .
我正在使用 :
-
spring-boot 1.5.9.RELEASE
-
spring-cloud Edgware.SR1
-
spring-cloud-services-starter-service-registry 1.6.1.RELEASE
-
spring-cloud-dependencies 1.6.1.RELEASE
PCF日志:
[nio-8080-exec-4] s.c.a.AnnotationConfigApplicationContext : Refreshing SpringClientFactory-owner-microservice: startup date [Wed Mar 14 11:41:09 UTC 2018]; parent: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@10a035a0
[nio-8080-exec-4] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
[nio-8080-exec-4] c.netflix.config.ChainedDynamicProperty : Flipping property: owner-microservice.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
[nio-8080-exec-4] c.netflix.loadbalancer.BaseLoadBalancer : Client: owner-microservice instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=owner-microservice,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
[nio-8080-exec-4] c.netflix.config.ChainedDynamicProperty : Flipping property: owner-microservice.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
[APP/PROC/WEB/0] [OUT] },Server stats: [[Server:owner-microservice.cf.region.cloud.hh.xxxxx:8080; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 00:00:00 UTC 1970; First connection made: Thu Jan 01 00:00:00 UTC 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
[APP/PROC/WEB/0] [OUT] 2018-03-14 11:41:09.870 INFO 19 --- [nio-8080-exec-4] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client owner-microservice initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=owner-microservice,current list of Servers=[owner-microservice.cf.region.cloud.hh.xxxxx:8080],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
[APP/PROC/WEB/0] [OUT] ]}ServerList:DiscoveryEnabledNIWSServerList:; clientName:owner-microservice; Effective vipAddresses:owner-microservice; isSecure:false; datacenter:null
[APP/PROC/WEB/0] [OUT] 2018-03-14 11:41:10.821 INFO 19 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty : Flipping property: owner-microservice.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
[APP/PROC/WEB/0] [OUT] at java.net.PlainSocketImpl.socketConnect(Native Method)
[APP/PROC/WEB/0] [OUT] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
[APP/PROC/WEB/0] [OUT] at java.net.Socket.connect(Socket.java:589)
[APP/PROC/WEB/0] [OUT] at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
[APP/PROC/WEB/0] [OUT] at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
[APP/PROC/WEB/0] [OUT] at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
[APP/PROC/WEB/0] [OUT] at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:686)
[APP/PROC/WEB/0] [OUT] at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:334)
[APP/PROC/WEB/0] [OUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[APP/PROC/WEB/0] [OUT] at java.lang.reflect.Method.invoke(Method.java:497)
[APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:870)
[APP/PROC/WEB/0] [OUT] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
[APP/PROC/WEB/0] [OUT] 2018-03-14 11:41:16.035 ERROR 19 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://owner-microservice/owner/detail/2/": No route to host; nested exception is java.net.NoRouteToHostException: No route to host] with root cause
[APP/PROC/WEB/0] [OUT] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
[APP/PROC/WEB/0] [OUT] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
[APP/PROC/WEB/0] [OUT] at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1104)
[APP/PROC/WEB/0] [OUT] at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:998)
[APP/PROC/WEB/0] [OUT] at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:729)
从以下日志片段开始,似乎负载均衡器能够找出owner-microservice实例的主机名
NFLoadBalancer:name=owner-microservice,current list of Servers=[owner-microservice.cf.region.cloud.hh.xxxxx:8080],
Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:1;
Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
但它没有使用该主机名来提出请求 . 它使用 "http://owner-microservice/owner/detail/2/
来发出请求:
ERROR 19 --- [nio-8080-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] :
Servlet.service() for servlet [dispatcherServlet] in context with path []
threw exception [Request processing failed; nested exception is
org.springframework.web.client.ResourceAccessException: I/O error on GET
request for "http://owner-microservice/owner/detail/2/": No route to host;
nested exception is java.net.NoRouteToHostException: No route to host]
with root cause
我尝试过的:
-
使用无架构URL(
//owner-microservice/detail/owner/2
,不带http:
) -
使用spring-boot 2.0.0.RELEASE和spring-cloud Fincheley.M8
我怎样才能解决这个问题?
我没有添加application.yml,pom和Application类以提高可读性 . 请询问他们是否可以帮助解决问题 .