從eureka報錯中得知的默認配置

配置信息

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的時候,控制檯卻輸出以下信息:java

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有本身的默認配置?spring

在一番搜索後獲得了答案(問題傳送門),由於我並未指定eureka-serverservice-url屬性,因此在服務註冊過來的時候eureka-server會嘗試將註冊信息複製到默認的service-url,即 localhost:8761上面.因此纔會報出這樣的錯誤!apache

解決方案

既然上面分析出來了問題,那麼解決就很容易 ,即覆蓋eureka-server的默認的屬性service-url就能夠了,在eureka-server添加以下代碼:api

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

默認配置

  在得知上面的解決方案後,不由思考eureka的這些默認配置在哪裏呢?他們的默認屬性值又是多少?
eureka的這些默認配置是存在org.springframework.cloud.netflix.eureka.EurekaClientConfigBean類裏面.app

@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";

  //......略

看到這裏一切都豁然開朗了post

相關文章
相關標籤/搜索