SpringCloud學習筆記三---Eureka資訊顯示問題, 自我保護機制及叢集搭建
一 Eureka整合到專案中出現的一些細節顯示問題
問題1. 註冊的服務中包含主機名稱
解決方法: 修改microservicecloud-provider-dept-8001 yml檔案中的配置, instance: instance-id: microservicecloud-dept8001
instance就是註冊的服務中顯示的例項名稱
eureka: client: #客戶端註冊進eureka服務列表內 service-url: defaultZone: http://localhost:7001/eureka instance: instance-id: microservicecloud-dept8001
解決之後:
問題2. 滑鼠放在註冊的服務上沒有ip地址顯示
解決方法: 修改microservicecloud-provider-dept-8001 yml檔案中的配置,
解決之後:
問題3 微服務info內容詳細資訊, 超連結點選服務報告ErrorPage
解決方法 : 修改microservicecloud-provider-dept-8001的pom檔案, 新增依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
總的父工程microservicecloud修改pom.xml新增構建build資訊, 新增maven外掛
<build> <finalName>microservicecloud</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <delimiters> <delimit>$</delimit> </delimiters> </configuration> </plugin> </plugins> </build>
修改microservicecloud-provider-dept-8001的application.yml
info:
app.name: microservicecloud
company.name: www.sedin.com
build.artifactId: $project.artifactId$
build.version: $project.version$
再重啟專案之後問題完美解決
解決之後:
二 Eureka的自我保護機制
Eureka客戶試圖在同一區域與Eureka Server交談。如果與伺服器通訊時出現問題或者同一區域中不存在伺服器,則客戶端將故障轉移到其他區域中的伺服器。
一旦伺服器開始接收流量,伺服器上執行的所有操作都將複製到伺服器知道的所有對等節點。如果某個操作由於某種原因而失敗,則會在下一個也會在伺服器之間複製的心跳上協調該資訊。
當Eureka伺服器啟動時,它會嘗試從相鄰節點獲取所有例項登錄檔資訊。如果從節點獲取資訊時出現問題,伺服器會在放棄之前嘗試所有對等體。如果伺服器能夠成功獲取所有例項,則會根據該資訊設定應接收的續訂閾值。如果有任何時間,續訂低於為該值配置的百分比(15分鐘內低於85%),伺服器將停止使例項過期以保護當前例項登錄檔資訊。
在Netflix中,上述安全措施稱為自我保護模式,主要用作在一組客戶端和Eureka伺服器之間存在網路分割槽的情況下的保護。在這些情況下,伺服器會嘗試保護已有的資訊。在大規模中斷的情況下可能存在這種情況,這可能導致客戶端獲得不再存在的例項。客戶端必須確保它們對eureka伺服器具有彈性,可以返回不存在或無響應的例項。在這些情況下,最好的保護是快速超時並嘗試其他伺服器。
在伺服器無法從相鄰節點獲取登錄檔資訊的情況下,它等待幾分鐘(5分鐘),以便客戶端可以註冊其資訊。伺服器通過僅將流量偏移到一組例項並導致容量問題,努力不向那裡的客戶端提供部分資訊。(翻譯自官網)
總結; 一句話:某時刻某一個微服務不可用了,eureka不會立刻清理,依舊會對該微服務的資訊進行儲存
Eureka自我保護機制預設情況下是自動開啟的, 它能有效保護健康的服務正常存在和執行, 如果需要關閉的話
#關閉eureka自我保護機制,修改檢查失效服務的時間
eureka.server.enable-self-preservation=false
#減少心跳時間
eureka.instance.lease-expiration-duration-in-seconds=10
eureka.instance.lease-renewal-interval-in-seconds=3