1. 程式人生 > >SpringCloud學習筆記三---Eureka資訊顯示問題, 自我保護機制及叢集搭建

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