Eureka註冊中心ip Address引數詳解

2021-09-11 14:04:57 字數 2704 閱讀 6987

在eureka中如果不指定任何的ip引數的話,那麼提供者註冊到eureka中,消費者進行消費的時候訪問的ip為部署eureka伺服器的ip位址。

那麼正常情況下,伺服器a呼叫將會調到服務b的身上,而此時如果在服務b中加入了一下的引數。那麼就變了

eureka.instance.prefer-ip-address=true

eureka.instance.ip-address=172.12.9.0

複製**

此時服務c和服務b是相同的服務,部署在不同的伺服器中,ip位址不同,那麼此時呼叫的服務將會被eureka**到服務c中。

我們可以在eurekaclientautoconfiguration類中找到eurekainstanceconfigbean方法。發現他在程式啟動的時候就會載入一些eureka的配置資訊

@bean

@conditionalo****singbean(value = eurekainstanceconfig.class, search = searchstrategy.current)

public eurekainstanceconfigbean eurekainstanceconfigbean(inetutils inetutils,

managementmetadataprovider managementmetadataprovider, configurableenvironment env) throws malformedurlexception

if(issecureportenabled)

if (stringutils.hastext(hostname))

string statuspageurlpath = eurekapropertyresolver.getproperty("statuspageurlpath");

string healthcheckurlpath = eurekapropertyresolver.getproperty("healthcheckurlpath");

if (stringutils.hastext(statuspageurlpath))

if (stringutils.hastext(healthcheckurlpath))

managementmetadata metadata = managementmetadataprovider.get(instance, serverport,

servercontextpath, managementcontextpath, managementport);

if(metadata != null)

mapmetadatamap = instance.getmetadatamap();

if (metadatamap.get("management.port") == null)

} setupjmxport(instance, jmxport);

return instance;

}複製**

此時我們看到string ipaddress = eurekapropertyresolver.getproperty("ipaddress");就是在這進行設定的,此時如果沒有設定eureka.instance.ip-address引數的時候,那麼此ipaddress就是本機的ip。這是如何設定的呢?我們可以看到**中有這麼一句

eurekainstanceconfigbean instance = new eurekainstanceconfigbean(inetutils);

instance.setnonsecureport(serverport);

instance.setinstanceid(getdefaultinstanceid(environmentpropertyresolver));

instance.setpreferipaddress(preferipaddress);

instance.setsecureportenabled(issecureportenabled);

if (stringutils.hastext(ipaddress))

複製**

eurekainstanceconfigbean先進行了初始化,我們進入eurekainstanceconfigbean的構造引數中看

public eurekainstanceconfigbean(inetutils inetutils) 

複製**

可以看到在這進行了初始化ipaddress引數,其中hostinfo是如何得到的就進行講解了,其本質就是為了獲取本機的真實ip。到這給eureka註冊中心的註冊資訊已經準備好了

然後在instanceinforeplicator中呼叫run方法進行將自己資訊註冊到遠端的eureka中。

此時就可以看到如果設定eureka.instance.prefer-ip-address為false時,那麼註冊到eureka中的ip位址就是本機的ip位址。如果設定了true並且也設定了eureka.instance.ip-address那麼就將此ip位址註冊到eureka中。那麼呼叫的時候,傳送的請求目的地就是此ip位址。

Eureka 註冊中心

角色 1 服務提供者 2 服務消費者 3 服務註冊中心 a.高ha 支援資料持久化和服務集群 b.資料一致性問題,集群中的所有客戶應該看到同乙份資料不能出現讀寫資料不一致 c.資料變更主動推送,當註冊中心的資料發生變更時要及時通知客戶端 關鍵性功能設計 1 服務提供者在啟動時,向註冊中心註冊自己提供...

Eureka註冊中心

一 服務端配置 2 步 2 匯入依賴 org.springframework.cloud spring cloud starter eureka server 1.3.4.release 3 啟動類中加入註解 enableeurekaserver 4 yml檔案配置 此處配置的是多eureka版,三...

Eureka註冊中心

1.導包 org.springframework.cloudgroupid spring cloud starter netflix eureka serverartifactid dependency dependencies 2.主配置類 enableeurekaserver 開啟服務 publ...