[轉]Eureka自我保護機制、健康檢查的做用、actuator模塊監控

  • Eureka自我保護機制

接着以上篇文章創建的三個工程爲基礎(eureka-server,uerreg,myweb),默認Eureka是開啓自我保護的。咱們來作個測試,咱們先啓動三個工程,咱們訪問註冊中心http://localhost:8761/,java

 
image.png
能夠看到,實例是成功註冊到中心的。此時咱們將uerreg服務關閉,刷新註冊中心,咱們會發現以下界面
 
image.png
咱們除了看到了一行紅色的警告信息,還發現了一件神奇的事情,就是咱們的服務實例雖然被kill了,可是在服務註冊中心他仍是存在的。這就是Eureka自我保護機制,他不會剔除已經掛掉的服務,他會認爲這個服務是在嘗試從新鏈接的。
咱們在開發過程當中確定是不但願這樣的,不利於開發。咱們能夠關閉Eureka的自我保護機制(實際生產環境不建議關閉)。

 

  • eureka-server服務端
    配置文件中咱們添加以下配置
#關閉保護機制,以確保註冊中心將不可用的實例正確剔除
eureka.server.enable-self-preservation=false
#(表明是5秒,單位是毫秒,清理失效服務的間隔 )
eureka.server.eviction-interval-timer-in-ms=5000

 

  • userreg客戶端
    配置文件中咱們添加以下配置
# 心跳檢測檢測與續約時間
# 測試時將值設置設置小些,保證服務關閉後註冊中心能及時踢出服務
# 配置說明
#  lease-renewal-interval-in-seconds 每間隔10s,向服務端發送一次心跳,證實本身依然」存活「
#  lease-expiration-duration-in-seconds  告訴服務端,若是我20s以內沒有給你發心跳,就表明我「死」了,將我踢出掉。
eureka.instance.lease-renewal-interval-in-seconds=10
eureka.instance.lease-expiration-duration-in-seconds=20

  

咱們從新啓動服務,而後關閉userreg客戶端進行測試。
 
 

此時咱們發現,紅色警告變成了自我保護被關閉的警告,且實例被註冊中心剔除,代表此時自我保護機制被關閉。mysql

  • 健康檢查

人會生病,就像人同樣服務有時候也會出現異常狀況,咱們也須要知道某個服務的健康情況。咱們能夠經過添加以下依賴,開啓某個服務的健康檢查。以userreg服務爲例
pom文件中添加以下依賴web

<!--健康檢查依賴-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-actuator</artifactId>
       </dependency>

  

ok,其餘的什麼都不變,咱們來訪問一下這個接口http://localhost:9001/health
咱們看到了一個很簡短的健康報告:{"description":"Spring Cloud Eureka Discovery Client","status":"UP"},相似的還有spring

info 顯示任意的應用信息
metrics 展現當前應用的指標信息 true
mappings 顯示全部@RequestMapping路徑的整理列表
trace 顯示trace信息(默認爲最新的一些HTTP請求)
health 展現應用的健康信息
beans 顯示一個應用中全部Spring Beans的完整列表sql

這其中有一些是敏感信息,出於安全考慮,若是不設置apache

#關掉認證(公網下的生產環境不建議,內網部署能夠)
#management.security.enabled=false

默認是沒法訪問的。
若是咱們要訪問查看並且想保證必定的安全性,咱們應該作什麼呢?咱們在userreg的pom文件中引入tomcat

<!--安全認證依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

  

此時咱們訪問/beans敏感信息時,彈出以下信息,須要咱們進行身份認證安全

 
 

僅僅引入依賴實際上是有問題的,由於咱們請求正常的業務接口他也會要求進行認證,解決辦法能夠在userreg工程的配置文件中添加以下設置:springboot

#(增長了訪問路徑)
management.context-path=/admin
security.user.name=root
security.user.password=123
#只對/admin進行安全認證
security.basic.path=/admin

重啓服務,咱們訪問http://localhost:9001/admin/beans,注意哦,咱們在配置文件中添加了相對路徑,只對admin進行驗證,此時咱們輸入正確的用戶名和密碼(已在配置文件中配置)會顯示咱們須要的信息。app

  • 實戰健康檢查

健康檢查在實際應用場景中有哪些呢?舉個例子,咱們配置userreg工程數據源
在pom文件中引入如下依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

而後創建一個配置類,配置數據源DataSource

@Configuration
public class Myconfig {
   @Bean
   public DataSource dataSource()
   {
       org.apache.tomcat.jdbc.pool.DataSource dataSource=new org.apache.tomcat.jdbc.pool.DataSource();
       dataSource.setUrl("jdbc:mysql://localhost/test?characterEncoding=UTF-8");
       dataSource.setUsername("root");
       dataSource.setPassword("mysql");
       dataSource.setDriverClassName("com.mysql.jdbc.Driver");
       return dataSource;
   }
}

這個在springboot中已經學習過,後續我會把springboot學習過程以博客的方式記錄下來,配置完成數據源以後,咱們啓動服務,訪問http://localhost:9001/admin/health 查看健康狀況

 
image.png
咱們能夠看到db的健康狀況。假如此時咱們的mysql服務掛掉,會怎樣呢?
 
image.png
咱們手動中止mysql服務,而後再看健康狀況
 
image.png
發現db狀態已經由「UP」變成了「DOWN」並顯示了錯誤信息,這樣就很方便咱們查看服務的健康狀況了。
做者:謎00016 連接:https://www.jianshu.com/p/df61a3273528 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索