从eureka报错中得知的默认配置

25次阅读

共计 3422 个字符,预计需要花费 9 分钟才能阅读完成。

配置信息
eureka-server
spring.application.name=eureka-server
server.port=1111

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka-client
spring.application.name=eureka-client
server.port=8002
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
错误分析
如上配置, 配置信息非常简单. 在启动 eureka-server 的时候并未发现任何异常, 但是在启动 eureka-client 的时候, 控制台却输出如下信息:
com.sun.jersey.api.client.ClientHandlerException: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:8761 timed out
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1]
at com.netflix.eureka.cluster.DynamicGZIPContentEncodingFilter.handle(DynamicGZIPContentEncodingFilter.java:48) ~[eureka-core-1.7.0.jar:1.7.0]
at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.7.0.jar:1.7.0]
at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1]
at com.netflix.eureka.transport.JerseyReplicationClient.submitBatchUpdates(JerseyReplicationClient.java:116) ~[eureka-core-1.7.0.jar:1.7.0]
at com.netflix.eureka.cluster.ReplicationTaskProcessor.process(ReplicationTaskProcessor.java:71) ~[eureka-core-1.7.0.jar:1.7.0]
at com.netflix.eureka.util.batcher.TaskExecutors$BatchWorkerRunnable.run(TaskExecutors.java:187) [eureka-core-1.7.0.jar:1.7.0]
看着这段揪心的提示后反复检查了配置和代码, 实在想不明白哪个地方有配置 8761 端口号. 在这个时候打开注册中心 localhost:1111 后也看到 eureka-client 服务也注册上来了, 那为什么会报这个错了, 莫非 eureka 有自己的默认配置?
在一番搜索后得到了答案 (问题传送门), 因为我并未指定 eureka-server 的 service-url 属性, 所以在服务注册过来的时候 eureka-server 会尝试将注册信息复制到默认的 service-url, 即 localhost:8761 上面. 所以才会报出这样的错误!
解决方案
既然上面分析出来了问题, 那么解决就很容易 , 即覆盖 eureka-server 的默认的属性 service-url 就可以了, 在 eureka-server 添加如下代码:
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
默认配置
  在得知上面的解决方案后, 不禁思考 eureka 的这些默认配置在哪里呢? 他们的默认属性值又是多少?eureka 的这些默认配置是存在 org.springframework.cloud.netflix.eureka.EurekaClientConfigBean 类里面.
@Data
@ConfigurationProperties(EurekaClientConfigBean.PREFIX)
public class EurekaClientConfigBean implements EurekaClientConfig, EurekaConstants {

public static final String PREFIX = “eureka.client”;

@Autowired(required = false)
PropertyResolver propertyResolver;

public static final String DEFAULT_URL = “http://localhost:8761” + DEFAULT_PREFIX
+ “/”;
public static final String DEFAULT_ZONE = “defaultZone”;

private static final int MINUTES = 60;

private boolean enabled = true;

@NestedConfigurationProperty
private EurekaTransportConfig transport = new CloudEurekaTransportConfig();

private int registryFetchIntervalSeconds = 30;

private int instanceInfoReplicationIntervalSeconds = 30;

private int initialInstanceInfoReplicationIntervalSeconds = 40;

private int eurekaServiceUrlPollIntervalSeconds = 5 * MINUTES;

private String proxyPort;

private String proxyHost;

private String proxyUserName;

private String proxyPassword;

private int eurekaServerReadTimeoutSeconds = 8;

private int eurekaServerConnectTimeoutSeconds = 5;

private String backupRegistryImpl;

private int eurekaServerTotalConnections = 200;

private int eurekaServerTotalConnectionsPerHost = 50;

private String eurekaServerURLContext;

private String eurekaServerPort;

private String eurekaServerDNSName;

private String region = “us-east-1”;

//…… 略
看到这里一切都豁然开朗了

正文完
 0