Spring Cloud Eureka配置檔案例子與較為詳細說明
阿新 • • 發佈:2019-01-06
Eureka服務端:
application.yml
# eureka(最)簡單單點開發配置。支援yml與properties兩種,yml檔案字尾必須為yml,不能是yaml,否則找不到該檔案,使用預設配置。 # yml檔案大小寫敏感; # 每個級別至少用1個空格縮排,也可多個,但同級別的必須一致,不支援tab,本專案按照eclipse的外掛(spring官方Spring Tool Suite3.9.3)統一使用兩個空格; # 屬性值與冒號間必須有一個空格。比如port:8761則不會生效。 server: port: 8761 # eureka伺服器埠號。儘管無論官網還是大部分參考書都使用8761,但預設並不是,而是8080 eureka: client: # 預設情況下,eureka server同時也是eureka client,用於相互註冊形成高可用eureka服務。 # 單點時,如果registerWithEureka配置為true,則eureka server會報錯Cannot execute request on any known server registerWithEureka: false # 是否註冊到eureka服務,預設為true,當前已為eureka server,且單點eureka,故配置為false fetchRegistry: false # 是否在本地快取登錄檔資訊,預設為true,當前為單點eureka server,不需要從其他eureka除獲取登錄檔資訊,更談不上快取,故配置為false #server: # 在伺服器接收請求之前等待的初始時間,預設等待5min(John Carnell) #waitTimeInMsWhenSyncEmpty: 5 # John說開發時最好註釋此配置,服務註冊需要3次心跳,每次10s,也就是30s才能顯示在eureka。但是為什麼我這裡馬上就顯示呢? # 指定生效的配置 spring: profiles: active: dev # 用三個連線符進行profile分割,根據active的profiles選擇執行哪一段,上面沒有profiles的表示公共執行部分 --- # 本地開發環境 spring: profiles: dev security: # 開啟服務註冊認證機制 basic: enabled: true # 是否開啟認證,預設true,需開啟時可省略。 user: name: eureka # 認證時,使用的使用者名稱 password: eureka # 認證時,使用的密碼 eureka: # 詳見EurekaServerConfigBean,需要注意與Client和Instance在client的jar包不同,Server是在server的jar包。 # eureka的各項配置可見EurekaXXXConfigBean。 server: # 自我保護機制,預設true。開啟後,心跳失敗在15分鐘內低於85%(renewalPercentThreshold)的服務,也不進行剔除。 # 關閉後,主頁提示:RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF. # THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS. enableSelfPreservation: true # 本地除錯時可fasle關閉。但生產建議開啟,可防止因網路不穩定等原因導致誤剔除服務。 renewalPercentThreshold: 0.85 # 預設85% client: serviceUrl: # registerWithEureka關閉後,defaultZone沒有配置的必要。如果開啟,即使配置為本機一樣報錯。 # 也就是說defaultZone任何時候都沒有配置為localhost的必要。這點上John的配置更好,永超和周立包括志朋的配置有點多餘。 # 但是周立說的對,這個屬性預設配置是http://localhost:8761/eureka,也就是當你沒有使用者名稱密碼安全認證時,本機除錯時,客戶端可以不配置, # 但對於server來說,這個預設沒有什麼作用。對於client來說,也只有除錯的時候有點作用。 # 但有一點很奇怪,既然默認了8761埠,為什麼eureka server的預設埠要用8080而不是8761呢? defaultZone: http://${security.user.name}:${security.user.password}@localhost:${server.port}/eureka # 本配置應刪除。 --- # 測試環境。profiles配置為主機名,根據主機名進行啟用,需在啟動指令碼中--spring.profiles.active=${HOST_NAME}, # 因為啟動指令碼的優先順序比本檔案的active優先順序高。 # 多臺eureka高可用環境下,每臺eureka的defaultZone配置都不一樣,因為不能把自己也配置上,因為為了保證每臺eureka的程式碼配置一致方便釋出, # 需要採取yml的---分隔,然後通過主機名啟動這種模式進行。 spring: profiles: hifu-test1 security: user: name: eureka password: eureka eureka: instance: hostname: hifu-test1 server: # eureka server重新整理readCacheMap的時間,注意,client讀取的是readCacheMap,這個時間決定了多久會把readWriteCacheMap的快取更新到readCacheMap上 # 預設30秒,eclipse提示預設0應該是錯誤的,原始碼中responseCacheUpdateIntervalMs = 30 * 1000。 response-cache-update-interval-ms: 3000 # 網上很多專家的部落格錯誤寫成responseCacheUpdateInvervalMs,請注意。這裡配置為3秒。 # eureka server快取readWriteCacheMap失效時間,這個只有在這個時間過去後快取才會失效,失效前不會更新, # 過期後從registry重新讀取註冊服務資訊,registry是一個ConcurrentHashMap。 # 由於啟用了evict其實就用不太上改這個配置了,預設180s responseCacheAutoExpirationInSeconds: 180 # 啟用主動失效,並且每次主動失效檢測間隔為3s。原始碼evictionIntervalTimerInMs = 60 * 1000,預設一分鐘。 # 需要注意的是該配置會列印INFO日誌,增加info日誌量,修改後從每60秒列印一次變成3秒列印一次。 evictionIntervalTimerInMs: 3000 # 注意不要寫成EvictionIntervalTimerInMs,yml大小寫敏感。 client: serviceUrl: # 配置其他eureka的地址,如果多臺則逗號分隔。 defaultZone: http://${security.user.name}:${security.user.password}@10.13.22.19:${server.port}/eureka healthcheck: enabled: true registerWithEureka: true # eureka的高可用,需要互相註冊,配置為true,覆蓋本檔案最上面的預設配置false。 fetchRegistry: false # eureka之間如果網路不穩定,客戶端一般也會快取了註冊列表,因此eureka服務可以不快取,我覺得更能確保eureka之間的一致。 --- spring: profiles: hifu-test2 security: user: name: eureka password: eureka eureka: instance: hostname: hifu-test2 server: responseCacheUpdateIntervalMs: 3000 responseCacheAutoExpirationInSeconds: 180 evictionIntervalTimerInMs: 3000 client: serviceUrl: defaultZone: http://${security.user.name}:${security.user.password}@10.13.22.18:${server.port}/eureka healthcheck: enabled: true registerWithEureka: true fetchRegistry: false
Eureka客戶端:
server: port: 8010 #設定當前服務埠 context-path: /api #設定服務上下文路徑 #debug: true eureka: # 詳見EurekaClientConfigBean(實現EurekaClientConfig) client: # 是否啟用eureka客戶端。預設true enabled: true # 本地除錯時,若不想啟動eureka,可配置false即可,而不需要註釋掉@EnableDiscoveryClient這麼麻煩。感謝永超,從他的書知道這個屬性。 # 支援registerWithEureka(John、周立)和register-with-eureka(翟永超)兩種寫法,eclipse的STS預設使用後者。 # 基本所有配置使用橫槓或者駝峰都可以,滑鼠放在上面,eclipse都可以顯示詳細註解和預設值(如果有)。 registerWithEureka: true # 預設true,因此也可省略。 fetchRegistry: true # 預設true,此處可不配置。 # 快取清單更新時間,預設30秒。見EurekaClientConfigBean,其中DefaultEurekaClientConfig可不看(前者spring實現,後者Netflix實現) registry-fetch-interval-seconds: 30 # 如果想eureka server剔除服務後儘快在client體現,我覺得可縮短此時間。 # eureka服務的位置,如配置錯誤,則:Cannot execute request on any known server # 詳見:com.netflix.discovery.endpoint.EndpointUtils serviceUrl: defaultZone: http://eureka:
[email protected]:8761/eureka # 如果需要註冊多個伺服器,可用逗號隔開,例如:, # 周立在Camden SR4(對應eureka-client.jar1.2.6)中說有該屬性,但我在SR6(對應1.2.4)和SR4中都找不到; # 又查找了Brixton SR7(對應1.1.7,其實不光eureka-client,整個spring-cloud-netflix都是這個版本),也是沒有。 # 這是因為該屬性IDE確實不能提示,但寫法是正確的。作用是修改eureka的健康檢查方式(心跳),改為用actuator,詳見HealthCheckHandler HealthIndicator。 # 周立寫的不是太詳細,可詳見這部落格:https://blog.csdn.net/xiao_jun_0820/article/details/77991963 # 若配置healthcheck,需引入actuator。 healthcheck: enabled: true # 我建議配置為true。心跳機制有個問題,如當客戶端的資料庫連接出現問題導致不可用時,心跳機制不能反映,但actuator的health可以。 # 詳見EurekaInstanceConfigBean。或com.netflix.appinfo.InstanceInfo(與spring大致相同) instance: # 是否以IP註冊到Eureka Server上,如果false則不是IP而是伺服器名稱 # 但我設定了false,eureka主頁仍顯示192.168.100.16:client-microservice:8010 preferIpAddress: true # 預設false。應該始終設定為true。如果基於Docker等容器的部署,容器會生成一個隨機的主機名,此時DNS不存在該名,無法解析 - John Carnell # 例項名。 instanceId: ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}} # 服務續約的兩個重要屬性 leaseRenewalIntervalInSeconds: 30 # 服務續約間隔時間。預設每隔30秒,客戶端會向服務端傳送心跳。見DiscoveryClient.initScheduledTasks leaseExpirationDurationInSeconds: 90 # 服務失效時間。預設為90秒服務端接收不到客戶端的心跳,則剔除該客戶端服務例項。 # 端點配置。若配置了context-path,actuator的監控端點會增加字首,此時eureka也需要相應增加 status-page-url-path: ${server.context-path}/info health-check-url-path: ${server.context-path}/health
參考: