Default hostname when registering spring cloud eureka solve the client rather than the ip


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 {
......
}
 
 

Guess you like

Origin www.cnblogs.com/xuzhujack/p/11234407.html