在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...