2017-04-04 61 views
2

當Spring Cloud Eureka實例啓動時,我可以靜態地定義一些實例元數據(在我的application.yml中的eureka.instance.metadataMap.*中)或動態地(例如使用EurekaInstanceConfigBean)定義一些實例元數據。但是一旦實例被註冊,在更新配置bean之後,這個元數據不再在Eureka中更新。 有沒有辦法定義一些在Eureka中動態更新的元數據?所以Eureka的工作方式就像每個實例的鍵值存儲一樣。動態更新Eureka實例元數據

回答

3

如果您想更新來自尤里卡客戶端的任何元數據,只需使用com.netflix.appinfo.ApplicationInfoManager對象並致電registerAppMetadata(Map<String, String>)即可。 如果是這樣,這個信息會在Eureka服務器中更新,通常很快或至少在30秒內。您可以使用DI獲取ApplicationInfoManger的實例。

如果您想要更新其他服務實例的元數據,只需像下面那樣調用REST API來發送給eureka服務器。

PUT /eureka/apps/appID/instanceID/metadata?key=value 
+0

謝謝,它的工作!正是我在找什麼。你知道這30秒間隔是否可以調整到較小的一個? – FVlad

+1

首先,您可以調整實例信息複製的時間間隔,並且會影響從尤里卡客戶端本身向尤里卡服務器報告任何更改的持續時間。 'eureka.client.initialInstanceInfoReplicationIntervalSecond','eureka.client.instanceInfoReplicationIntervalSeconds'。但正如我上面寫的,通常來自尤里卡客戶端的任何更改都會根據需要向服務器報告。所以調整這些值並不是很有效。 –

+1

如果您想接收來自另一個尤里卡客戶端的任何數據更改(包括元數據),則它們之間有許多緩存 - 尤里卡服務器響應緩存,尤里卡客戶端緩存。因此,如果您想快速從另一個尤里卡客戶端接收這些更改,則還需要調整其他選項。 –