eureka of client default is to use the hostname instead of ip registration to the server.
In this case use feign client will use the hostname be invoked when calling each other through inter-service eureka, so call failed.
Given as follows:
Caused by: a java.net.UnknownHostException: XXXX-hostname
AT java.net.AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl.java:184)
AT java.net.SocksSocketImpl.connect (SocksSocketImpl.java:392)
AT the java.net. socket.connect (Socket.java:589)
AT sun.net.NetworkClient.doConnect (NetworkClient.java:175)
AT sun.net.www.http.HttpClient.openServer (HttpClient.java:463)
AT sun.net.www .http.HttpClient.openServer (HttpClient.java:558)
AT sun.net.www.http.HttpClient. <the init> (HttpClient.java:242)
AT sun.net.www.http.HttpClient.New (HttpClient.java : 339)
at sun.net.www.http.HttpClient.New(HttpClient.java:357)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1220)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:984)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1334)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1309)
at feign.Client$Default.convertAndSend(Client.java:133)
at feign.Client$Default.execute(Client.java:73)
at org.springframework.cloud.sleuth.instrument.web.client.feign.TraceFeignClient.execute(TraceFeignClient.java:80)
at org.springframework.cloud.netflix.feign.ribbon.FeignLoadBalancer.execute(FeignLoadBalancer.java:77)
at org.springframework.cloud.netflix.feign.ribbon.FeignLoadBalancer.execute(FeignLoadBalancer.java:45)
at com.netflix.client.AbstractLoadBalancerAwareClient$1.call(AbstractLoadBalancerAwareClient.java:109)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:303)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:287)
at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:231)
at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:228)
at rx.Observable.unsafeSubscribe(Observable.java:10211)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.drain(OnSubscribeConcatMap.java:286)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.onNext(OnSubscribeConcatMap.java:144)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:185)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180)
at rx.Observable.unsafeSubscribe(Observable.java:10211)
Solution:
1, ip to use the service eureka-server, needs to increase the allocation follows the eureka client:
eureka.instance.prefer-ip-address = true or eureka.instance.prefer-ip-address = true
eureka.instance.instance-spring.cloud.client.ipAddress ID = $ {}: $ {##} the server.port this line can be added from time to increase, for example to display only
feign Interface Example:
@FeignClient("xxx-business-service-name")
public interface MyFeignClient {
......
}
2, using the domain name invoke, by injection annotations domain name services, where the domain name using the configuration injection, to multi-environment fit
Interface feign example:
@FeignClient(name = "xxx-business-service-name", url = "http://${xxx.business.service.domain}")
public interface MyFeignClient {
......
}