1. 程式人生 > >spring cloud中的例項命名規則

spring cloud中的例項命名規則

springboot例項的預設命名 SpringCloud體系裡的,服務實體向eureka註冊時,註冊名預設是“IP名:應用名:應用埠名”,即spring.cloud.client.ipAddress:{spring.application.name}:{spring.application.instance_id:{server.port}}。

有些文章說預設的instance-id註冊名是用機器主機名代替ip名,至少我在SpringCloud版本Dalston和Edgware下,無論eureka.instance.prefer-ip-address為true或者false,註冊到eureka介面的都是以ip開頭的,更高版本還沒試過。

那麼如果我們想自定義服務在eureka上的例項名怎麼弄呢?這個需求在服務多例項部署下很自然,因為多個例項下,可能不同的例項執行的是不同的版本,如果在eureka介面能看到每個例項執行的版本號,就更加方便問題的排查。尤其在開發和測試環境下,有些例項A執行的版本可能沒有另外一些例項B執行版本的功能,但是ribbon又做了負載均衡,將對應這些功能的請求轉發到A,就會造成錯誤的響應。如果eureka介面顯示了版本號,那麼我們就能先行定位問題的來源是不是版本的問題。

給例項加上版本號 說了那麼多,那麼怎麼給eureka介面上例項的顯示名字加上版本號呢,或者說自定義格式。有如下步驟:

(1)要配置的屬性為eureka.instance.instance-id。或者eureka.instance.instanceId也可以。好像目前SpringCloud對屬性的中劃線和駝峰型寫法區分並不是很嚴。

(2)eureka.instance.instance-id必須寫在application.properties或application.yml中。不能寫在bootstrap.properties和bootstrap.yml中。可以去了解下springboot載入預設配置檔案的順序,bootstrap是在application之前的。寫在bootstrap裡的話,自定義的instance-id並不會在eureka介面生效,原理沒研究過。

(3)取值如下,這裡以寫在application.properties為例:

eureka.instance.instance-id=

spring.cloud.client.ipAddress:{spring.application.name}:server.port:@project.version@project.versionmavenspringbootparentmaven{*}修改成了@*@,所以引用maven屬性要用@@,而其他的比如server.port本來就是springboot的屬性,直接${}。另一種方法可以參考博文http://blog.csdn.net/gj5266400/article/details/74914486 修改springboot對maven屬性的引用符,統一為${}。

修改完後再次啟動例項,eureka介面註冊服務名已經加上了版本號