Лента не может подключиться к сервису, разрешенному Eureka на PCF
У меня есть сервис owner-consumer-service
, который разговаривает с другим сервисом owner-service
, Я использую сервер Eureka для обслуживания реестра.
owner-consumer-service
имеет RestTemplate
с @LoadBalanced
аннотаций. RestTemplate звонки owner-service
и возвращает ответ. Я использую эврика-ленту.
Все отлично работает на локальной машине.
- Обе службы зарегистрированы в Eureka.
- Возможность звонить
owner-service
непосредственно - Возможность звонить
owner-service
черезowner-consumer-service
Затем я развернул все службы и сервер Eureka на PCF.
- Обе службы зарегистрированы в Eureka.
- Возможность звонить
owner-service
непосредственно - Невозможно позвонить
owner-service
черезowner-consumer-service
Логи предполагают, что owner-consumer-service
может разрешить имя хоста owner-service
, но restTemplate не использует это имя хоста owner-service
для совершения звонка, и это приводит к ошибке.
Я использую:
- Пружинная загрузка 1.5.9. ВЫПУСК
- весеннее облако Edgware.SR1
- Spring-Cloud-Services-Starter-Service-Registry 1.6.1. ВЫПУСК
- весенние облака-зависимости 1.6.1. РЕЛИЗ
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)
Из следующего фрагмента журнала кажется, что loadbalancer может определить имя хоста экземпляра 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 и класс приложения для удобства чтения. Пожалуйста, спросите, могут ли они помочь в решении проблемы.