关于eurka客户端无法相互通信,注册中心正常的问题

多个客户端,出现情况是注册中心显示全部注册正常,但是客户端和客户端中间通信,一旦通信,就会出现线面的bug,
截图如下:
在这里插入图片描述
客户端1错误信息:

ERROR 19884 — [nio-8081-exec-6] 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.HttpClientErrorException: 400 ] with root cause

org.springframework.web.client.HttpClientErrorException: 400

后面的报错点还会指向客户端1去调用客户端2的位置信息,比如url等等。

客户端2错误信息:
The host [lixin_desktop:8082] is not valid
Note: further occurrences of request parsing errors will be logged at DEBUG level.

报java.lang.IllegalArgumentException错误

查看tomcat配置文件的源码,可以看到当请求带有特殊符号时,会报这个错误,同时他会告诉你客户端2失效。

综合两个客户端的错误,可以猜出,客户端1在向注册中心获取客户端2地址过程中,由于客户端2的没有对端口ip进行设置,此时服务者也就是客户端2上报过程中往往不会上报自己的ip地址,而是上报自己的主机名,那么请求的时候就变成了http://主机名:端口号/…;这样就报错了。

解决方法:
对上报形式进行设置,改成上报自己的ip而不是主机名
在客户端配置文件后加上

eureka.instance.prefer-ip-address=true  
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${server.port} 

即可

解决后截图:

在这里插入图片描述
附上一篇博客,关于eureka 客户端是如何获取本机ip地址。
http://blog.csdn.net/neosmith/article/details/53126924

你可能感兴趣的:(学习,Spring,Cloud)