微服务之间通过feign互相调用,跨服务器调用时抛出异常:No route to host

com.netflix.hystrix.exception.HystrixRuntimeException: failed and no fallback available.
    at com.netflix.hystrix.AbstractCommand$22.call(AbstractCommand.java:819) ~[hystrix-core-1.5.12.jar!/:1.5.12]
	at com.netflix.hystrix.AbstractCommand$22.call(AbstractCommand.java:804) ~[hystrix-core-1.5.12.jar!/:1.5.12]

Caused by: feign.RetryableException: No route to host (Host unreachable) executing
	at feign.FeignException.errorExecuting(FeignException.java:67) ~[feign-core-9.5.1.jar!/:?]
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:104) ~[feign-core-9.5.1.jar!/:?]

Caused by: java.net.NoRouteToHostException: No route to host (Host unreachable)
	at java.net.PlainSocketImpl.socketConnect(Native Method) ~[?:1.8.0_202]
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[?:1.8.0_202]

解决:

       feign调用其他服务也是通过获取eureka注册中心服务,猜测是否服务注册的IP存在问题,查询指定appId的实例:eureka url/eureka/apps/{appId},看到服务注册IP为管理IP,而规定服务器之间不能通过管理IP访问,只能通过业务IP,所以接下来就考虑如何注册服务到eureka为该服务器业务IP地址。涉及Eureka多网卡下的IP选择,采用配置指定使用的网络地址解决:
spring.cloud.inetutils.preferred-networks=10.258(配置内网业务IP网段)

其他解决方法(Eureka多网卡下的IP选择):

1、手动指定IP地址(ok):
eureka.instance.ip-address=10.258.001.01
2、只使用站点本地地址(验证不成功):
#spring.cloud.inetutils.use-only-site-local-interfaces=true
3、忽略指定名称的网卡(ok):
spring.cloud.inetutils.ignored-interfaces=bond0
4、使用正则表达式,指定使用的网络地址(ok):
spring.cloud.inetutils.preferred-networks=10.258
5、使用/etc/hosts中主机名称映射的ip(ok)(使用none(或其他非ip字符串)匹配不到网卡IP,则取本地host:InetAddress.getLocalHost(),即/etc/hosts中主机名称映射的ip):
spring.cloud.inetutils.preferred-networks=none

你可能感兴趣的:(微服务)