SpringCloud Eureka Server报错:ConnectTimeoutException:Connect to localhost:8761 timed out
在学习SpringCloud时,发现单机启动服务端会一直抛出异常Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:8761 timed outat org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSock...
在学习SpringCloud时,发现单机启动服务端会一直抛出异常
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:8761 timed out
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3]
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1]
… 10 common frames omitted
在控制台,启动后会一直刷新报错:
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:8761 timed out
这个原因是在Eureka的EurekaClientConfigBean
中,默认的服务器配置为
如上图:http://localhost:8761/eureka
一、自连接解决
我们8761这个端口并没有应用,所以我们一种解决方法就是覆盖此配置,在配置文件中设置让其Server自己连自己:
eureka.client.service-url.defaultZone=http://localhost:9090/eureka
更改后可以发现,服务端注册地址改为了我们自己,并且控制台不再报错
二、修改配置解决
碰到这个问题,我们还有一种思考方式,进入源码查看,看看这个peer集群在单机情况下能否关闭
启动时可以看到,是在PeerEurekaNodes
类中进行的添加集群节点,进入查看源码
protected List<String> resolvePeerUrls() {
InstanceInfo myInfo = applicationInfoManager.getInfo();
String zone = InstanceInfo.getZone(clientConfig.getAvailabilityZones(clientConfig.getRegion()), myInfo);
List<String> replicaUrls = EndpointUtils
.getDiscoveryServiceUrls(clientConfig, zone, new EndpointUtils.InstanceInfoBasedUrlRandomizer(myInfo));
int idx = 0;
while (idx < replicaUrls.size()) {
if (isThisMyUrl(replicaUrls.get(idx))) {
replicaUrls.remove(idx);
} else {
idx++;
}
}
return replicaUrls;
}
会发现有一个resolvePeerUrls
的方法,我们打断点看看,会不会进来:
正确进入,并且发现,如果isThisMyUrl()
判断为true的话,会将这个默认节点删除,这就是我们想要的!
再进入isThisMyUrl
打断点看看:
会发现格式化后url为localhost
,而instance.getHostName()
为计算机的名称,这里就有说法了,是不是只要在EurekaInstanceConfigBean
中配置hostName
这个属性,就能实现8761这个节点的去除,即不再报错呢?
先看下这个类中是否有这个属性:
果然有,进入到配置文件中配置试一下
eureka.instance.hostname = localhost
再次启动,看看节点是否被删除
果然执行了删除节点的方法,并且控制台不报错了。
总结
# 直接删除peer节点,单机启动
eureka.instance.hostname = localhost
#自连接解决
#eureka.client.service-url.defaultZone=http://localhost:9090/eureka
更多推荐
所有评论(0)