最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Spring Cloud健康檢查的陷阱

 更新時間:2021年07月23日 09:27:35   作者:tom3mao  
這篇文章主要介紹了關(guān)于Spring Cloud健康檢查的陷阱,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringCloud健康檢查的陷阱

健康檢查

基于Spring Boot Actuator的健康檢查是Spring Cloud微服務的必備組件,用來確保我們的服務是否可用。

引入 Spring Boot Actuator后,通過http://ip:port/health ,可以看到 HealthEndPoint 給我們提供默認的監(jiān)控結(jié)果,包含磁盤檢測和數(shù)據(jù)庫檢測。如下

{
    "status": "UP",
    "diskSpace": {
        "status": "UP",
        "total": 398458875904,
        "free": 315106918400,
        "threshold": 10485760
    },
    "db": {
        "status": "UP",
        "database": "MySQL",
        "hello": 1
    }
}

排除不必要的健康檢查項

有一天調(diào)用方突然反饋調(diào)不通我們的服務。查看Eureka控制臺,發(fā)現(xiàn)服務狀態(tài)是UP。查看服務進程一切正常。束手無策之際,忽然想到會不會是健康檢查在作怪,因為Eureka Client判斷服務可用與否的依據(jù)就是健康檢查。而Spring Boot Actuator所有的監(jiān)控項中的任何一個健康狀態(tài)是DOWN,那個整體應用的健康狀態(tài)也是DOWN,這時候調(diào)用方就把服務當作不可用。

再次查看http://ip:port/health,果然發(fā)現(xiàn)有一項郵件健康檢查掛了。

最近項目引入了spring-boot-starter-mail,實現(xiàn)發(fā)送郵件的功能。

郵箱服務器掛了,造成整個服務的監(jiān)控檢查狀態(tài)是DOWN。

{
  "status": "DOWN",
  "mail": {
    "status": "DOWN",
    "location": "email-smtp.test.com:-1",
    "error": "javax.mail.AuthenticationFailedException: 535 Authentication Credentials Invalid\n"
  },
  "diskSpace": {
    "status": "UP",
    "total": 266299998208,
    "free": 146394308608,
    "threshold": 10485760
  },
  "hystrix": {
    "status": "UP"
  }
}

由于郵件發(fā)送不是核心功能,可以把非核心組件從健康檢查中排除,避免造成整個服務不可用。

通過如下配置關(guān)閉郵箱健康檢查。

management.health.mail.enabled=false

springcloud-health檢查超時引發(fā)的大坑

0. 前提約定

service:只一個微服務

server:只提供一個微服務的app,一般一個service有多個server。

1. 問題介紹

線上springcloud遇到這樣的問題:某些時候會移除某個service的所有server。

2. 原因分析

springcloud中默認使用springboot-actauctor的health-url作為健康檢測,默認檢查的超時時間為10s,如果生產(chǎn)環(huán)境遇到網(wǎng)絡、db、redis慢或者掛了等問題,會導致health檢查請求超時,springcloud注冊中心會認為該server異常,從而將server狀態(tài)變更為critial,服務調(diào)用方(feign)會將該異常server從負載中移除(HealthServiceServerListFilter)。

如果遇到某網(wǎng)段或更大規(guī)模的網(wǎng)絡、db等問題,會導致某個service所有server都被注冊中心移除,導致該service不可用。

但是實際上該server只是存在部分問題例如:僅僅是db或redis慢,不算不可用,但還是被注冊中心強制摘除了。

3. 解決辦法

3.1 通用解決辦法

關(guān)閉health檢查,永遠返回up狀態(tài),只要程序正常啟動就認為可以提供正常服務。

如下是項目模板輸出默認的health檢查結(jié)果:

{
 "description": "",
 "status": "UP",
 "diskSpace": {
  "description": "",
  "status": "UP",
  "total": 50715856896,
  "free": 7065239552,
  "threshold": 10485760
 },
 "solr": {
  "description": "",
  "status": "UP",
  "solrStatus": "OK"
 },
 "redis": {
  "description": "",
  "status": "UP",
  "version": "2.8.21"
 },
 "db": {
  "description": "",
  "status": "UP",
  "authDataSource": {
   "description": "",
   "status": "UP",
   "database": "MySQL",
   "hello": "x"
  },
  "autodealerDataSource": {
   "description": "",
   "status": "UP",
   "database": "Microsoft SQL Server",
   "hello": "x"
  }
 }
}

關(guān)閉health檢查的方法:

# application*.yml中
management:
  health:
    defaults:
      enabled: false

關(guān)閉后health檢查結(jié)果:

{
 "description": "",
 "status": "UP",
 "application": {
  "description": "",
  "status": "UP"
 }
}

4. 如果有特定health檢查的需求

關(guān)閉health檢查后,如果需要某類health檢查需求,則需要單獨配置,配置方法如下:

management:
  health:
    defaults:
      enabled: false
    # 如下配置則打開db-health檢查
    db:
      enabled: true

health檢查結(jié)果如下:

{
 "description": "",
 "status": "UP",
 "db": {
  "description": "",
  "status": "UP",
  "authDataSource": {
   "description": "",
   "status": "UP",
   "database": "MySQL",
   "hello": "x"
  },
  "autodealerDataSource": {
   "description": "",
   "status": "UP",
   "database": "Microsoft SQL Server",
   "hello": "x"
  }
 }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用SpringBoot 工廠模式自動注入到Map

    使用SpringBoot 工廠模式自動注入到Map

    這篇文章主要介紹了使用SpringBoot 工廠模式自動注入到Map,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • nacos在liunx系統(tǒng)中啟動成功瀏覽器卻訪問不了的解決方法

    nacos在liunx系統(tǒng)中啟動成功瀏覽器卻訪問不了的解決方法

    在linux下搭建nacos,現(xiàn)在想要啟動,訪問nacos頁面,訪問不了,所以本文小編將給大家介紹nacos在liunx系統(tǒng)中啟動成功,瀏覽器卻訪問不了?全面的解決辦法,需要的朋友可以參考下
    2023-09-09
  • SpringBoot RESTful風格入門講解

    SpringBoot RESTful風格入門講解

    RESTful是一種web軟件風格,它不是標準也不是協(xié)議,它不一定要采用,只是一種風格,它倡導的是一個資源定位(url)及資源操作的風格,這篇文章主要介紹了SpringBoot使用RESTful接口
    2022-11-11
  • 詳解spring中使用Elasticsearch的代碼實現(xiàn)

    詳解spring中使用Elasticsearch的代碼實現(xiàn)

    本篇文章主要介紹了詳解spring中使用Elasticsearch的代碼實現(xiàn),具有一定的參考價值,有興趣的可以了解一下
    2017-05-05
  • Tomcat內(nèi)存溢出分析及解決方法

    Tomcat內(nèi)存溢出分析及解決方法

    堆是給開發(fā)人員用的上面說的就是,是在JVM啟動時創(chuàng)建;非堆是留給JVM自己用的,用來存放類的信息的,本文將詳細介紹Tomcat內(nèi)存溢出,需要了解更多的朋友可以參考下
    2012-11-11
  • Spring注解@Autowired和@Resource的區(qū)別詳解

    Spring注解@Autowired和@Resource的區(qū)別詳解

    這篇文章主要介紹了Spring注解@Autowired和@Resource的區(qū)別詳解,@Autowired與@Resource都可以用來裝配bean,都可以寫在字段或setter方法上,@Resource是JDK提供的注解,默認按照名稱進行裝配,名稱可通過name屬性進行指定,需要的朋友可以參考下
    2023-12-12
  • 基于SpringBoot和Dify實現(xiàn)流式響應輸出

    基于SpringBoot和Dify實現(xiàn)流式響應輸出

    這篇文章主要為大家詳細介紹了如何基于SpringBoot和Dify實現(xiàn)流式響應輸出效果,文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下
    2025-03-03
  • 關(guān)于Java的Character類詳解

    關(guān)于Java的Character類詳解

    這篇文章主要介紹了關(guān)于Java的Character類詳解,Java中的Character類是一個包裝類,用于封裝一個基本數(shù)據(jù)類型char的值,它提供了一些靜態(tài)方法來操作字符,需要的朋友可以參考下
    2023-05-05
  • 通過java.util.TreeMap源碼加強紅黑樹的理解

    通過java.util.TreeMap源碼加強紅黑樹的理解

    通過分析java.util.TreeMap源碼來對經(jīng)典問題紅黑樹加強理解和理清思路。
    2017-11-11
  • Java ThreadLocal 線程安全問題解決方案

    Java ThreadLocal 線程安全問題解決方案

    這篇文章主要介紹了Java ThreadLocal 線程安全問題解決方案的相關(guān)資料,需要的朋友可以參考下
    2016-09-09

最新評論

霸州市| 南通市| 虎林市| 江华| 辽阳市| 怀远县| 清涧县| 芜湖市| 蓬溪县| 临西县| 霍林郭勒市| 延吉市| 朝阳县| 习水县| 仲巴县| 久治县| 青龙| 汝州市| 云南省| 南木林县| 晋城| 张北县| 景宁| 曲水县| 荆州市| 金山区| 泉州市| 凌海市| 马龙县| 高密市| 阿拉善盟| 泉州市| 绩溪县| 衡水市| 玉林市| 新干县| 财经| 舞阳县| 改则县| 小金县| 克拉玛依市|