中華廚具網(wǎng)
    手機版    二維碼   標簽云  廚具企業(yè)大全

「極簡springcloud」7,斷路器hystrix全面解析

2024-05-13 10:45:00 來源:今日頭條 作者/編輯: 瀏覽次數(shù):5327 手機訪問 使用手機“掃一掃”以下二維碼,即可分享本文到“朋友圈”中。

在微服務場景中,通常會有很多層的服務調(diào)用。如果一個底層服務出現(xiàn)問題,故障會被向上傳播給用戶。我們需要一種機制,當?shù)讓臃詹豢捎脮r,可以阻斷故障的傳播。這就是斷路器的作用。他是系統(tǒng)服務穩(wěn)定性的最后一重保障。

在springcloud中斷路器組件就是hystrix。hystrix也是netflix套件的一部分。他的功能是,當對某個服務的調(diào)用在一定的時間內(nèi)(默認10s,由metrics.rollingstats.timeinmilliseconds配置),有超過一定次數(shù)(默認20次,由circuitbreaker.requestvolumethreshold參數(shù)配置)并且失敗率超過一定值(默認50%,由circuitbreaker.errorthresholdpercentage配置),該服務的斷路器會打開。返回一個由開發(fā)者設定的fallback

fallback可以是另一個由hystrix保護的服務調(diào)用,也可以是固定的值。fallback也可以設計成鏈式調(diào)用,先執(zhí)行某些邏輯,再返回fallback。

如何使用

netflix斷路器是安裝在服務消費者上。我們需要做的是在服務消費者上開啟斷路器并配置。

ribbon消費者:

1,引入依賴

2,打開開關

只需要在啟動類上加上@enablecircuitbreaker注解即可

3,在服務上加上fallback

4,測試,將服務提供者關掉

過一會,再將服務提供者啟動,可以觀察到,服務消費者自動恢復。

注意,配置的fallbackmethod方法必須與被@hystrixcommand注解的方法有意向的入?yún)⒑头祷刂?/p>

否則會報錯fallback method wasn't found: defaultfallback

在feign中使用

@enablefeignclients中已經(jīng)默認打開了斷路器功能,所以這里的啟動類上不需要再加@enablecircuitbreaker注解

只需要在@feignclient中為fallback參數(shù)指定fallback方法

因為@feignclient注解的是接口,所以我們必須創(chuàng)建一個替代的類,就像mock一樣

創(chuàng)建一個實現(xiàn)了helloservice接口的類

最后一步

在配置文件application.yml中開啟斷路器

在很早的版本中,feign的斷路器默認是開啟的。后來有人提issue,認為這樣不方便。一旦使用feign就默認使用了斷路器功能,導致了一些問題。后面從d版本開始斷路器就是默認關閉的,需要手動打開。

可以看到和ribbon一樣的效果

注意事項

如果方法執(zhí)行需要用到thread local的屬性,這個屬性默認是不能傳遞到fallback方法中的,因為在hystrix中, 主要通過線程池來實現(xiàn)資源隔離. 通常在使用的時候我們會根據(jù)調(diào)用的遠程服務劃分出多個線程池. 例如調(diào)用產(chǎn)品服務的command放入a線程池, 調(diào)用賬戶服務的command放入b線程池. 這樣做的主要優(yōu)點是運行環(huán)境被隔離開了. 這樣就算調(diào)用服務的代碼存在bug或者由于其他原因?qū)е伦约核诰€程池被耗盡時, 不會對系統(tǒng)的其他服務造成影響. 但是帶來的代價就是維護多個線程池會對系統(tǒng)帶來額外的性能開銷. 如果是對性能有嚴格要求而且確信自己調(diào)用服務的客戶端代碼不會出問題的話, 可以使用hystrix的信號模式(semaphores)來隔離資源.

你需要做如下配置

hystrix dashboard

既然斷路器可以檢測到服務的可用性,但是不夠直觀。hystrix dashboard可以提供一個監(jiān)控平臺,方便查看服務的可用性。

1,新建一個工程

因為dashboard是一個統(tǒng)一的斷路器監(jiān)控平臺,所以我們新建一個項目。不和現(xiàn)在服務消費者混在一起

2,引入依賴

3,注解啟動類

用@enablehystrixdashboard注解啟動類

啟動引用,訪問/hystrix

看上面的說明,我們可以知道,hystrix dashboard共支持三種不同的監(jiān)控方式

1,默認的集群監(jiān)控:通過url:turbine-hostname:port/turbine.stream開啟,實現(xiàn)對默認集群的監(jiān)控。

2,指定的集群監(jiān)控:通過url:turbine-hostname:port/turbine.stream?cluster=[clustername]開啟,實現(xiàn)對clustername集群的監(jiān)控。

3,單體應用的監(jiān)控:通過url/hystrix-app:port/hystrix.stream開啟,實現(xiàn)對具體某個服務實例的監(jiān)控。

注意,這里有點問題,我們以前說過,從springboot2開始,actuator都是要在請求路徑加上/actuator,也就是hystrix-app:port/actuator/hystrix.stream才對

delay:控制服務器上輪詢監(jiān)控信息的延遲時間,默認為2000毫秒,可以通過配置該屬性來降低客戶端的網(wǎng)絡和cpu消耗。

title:該參數(shù)可以展示合適的標題。

監(jiān)控單個實例的服務

我們先測試第3個,監(jiān)控單個實例的服務。這個最好理解

對于robbon工程,在上面我們已經(jīng)加好了斷路器。現(xiàn)在需要做的是引入actuator依賴

然后暴露hystrix.stream接口

啟動應用。

現(xiàn)在我把windows10.microdone.cn:8781/actuator/hystrix.stream的服務填上,點擊monitor

多點擊幾次請求,可以看到請求的成功失敗情況被監(jiān)控起來了

對于feign

我們上面講過,feign自己已經(jīng)集成了斷路器。但是如果要暴露hystrix.stream接口,還是必須引入spring-cloud-starter-netflix-hystrix依賴,在啟動類上打上@enablecircuitbreaker注解注解

然后測試,和ribbon一樣的效果

turbine

turbine又是個什么概念?

turbine是netflix的一個獨立項目,單獨的一個springcloud實例的斷路器數(shù)據(jù)用處并不大,而且很麻煩,像上面我們有兩個消費者項目,就需要開兩個頁面查看,能不能把這些監(jiān)控都聚合在以前看呢?

當然是可以的,所以才有了這個turbine項目

turbine的原理是,通過將將自己注冊到注冊中心,發(fā)現(xiàn)同一個注冊中心上的hystrix服務,然后聚合數(shù)據(jù)。再通過暴露自己的端點,在儀表盤上進行展示。

操作:

1,創(chuàng)建一個應用

2,引入依賴:

啟動類注解:

@enableturbine

@enablediscoveryclient

yml配置:

啟動,我們現(xiàn)在8792端口起來了turbine

在到hystrix頁面,在監(jiān)控地址填127.0.0.1:8792/turbine.stream

點擊monitor

可以看到已經(jīng)將feign和ribbon兩個工程的消費者集合在了一起

服務名helloservice#hello(string)和hiservice 是被hystrix fallback的方法名

關于default

cluster-name-expression集群名字,可以是spel表達式,這里用的是默認的default。如果想自定義集群的名字,改為如下配置:

turbine:

# 要監(jiān)控的應用,多個用逗號隔開

app-config: feign-consumer,ribbon-consumer

# 指定聚合哪些集群,多個使用","分割,默認為default

aggregator:

cluster-config: ribbon,feign

# 配合被監(jiān)控的應用使用。假設想要監(jiān)控的應用配置了eureka.instance.metadata-map.cluster: abc,則需要配置,同時turbine.aggregator.clusterconfig: abc

cluster-name-expression: metadata['cluster']

# 讓同一主機上的服務通過主機名與端口號的組合來進行區(qū)分,默認情況下會以host來區(qū)分不同的服務,這會使得在本機調(diào)試的時候,本機上的不同服務聚合成一個服務來統(tǒng)計。

combine-host-port: true

這個配置是用了兩個集群,ribbon和feign

cluster-name-expression配的是取元數(shù)據(jù)的cluster值

這個就需要對應去修改被監(jiān)控應用的配置文件了,

ribbon消費者工程:

feign消費者工程:

全部重啟一下

再去hystrix頁面

這個時候再用 127.0.0.1:8792/turbine.stream是連不上的,因為集群名字已經(jīng)變了,不再有default集群了

分別用127.0.0.1:8792/turbine.stream?cluster=feign和ribbon去監(jiān)控

以上是網(wǎng)絡信息轉(zhuǎn)載,信息真實性自行斟酌。

 
本條標題:「極簡springcloud」7,斷路器hystrix全面解析
本條信息網(wǎng)址:
文本助手 資訊搜索 分享好友 打印本文 關閉窗口
閱讀關鍵詞
  • 手機瀏覽本文

    手機應用中掃描本文二維碼,即可瀏覽本文或分享到您的社交網(wǎng)絡中。

  • 微信公眾號

    掃描二維碼,關注中華廚具網(wǎng)微信公眾號,實時了解行業(yè)最新動態(tài)。

版權(quán)/免責聲明:
一、本文圖片及內(nèi)容來自網(wǎng)絡,不代表本站的觀點和立場,如涉及各類版權(quán)問題請聯(lián)系及時刪除。
二、凡注明稿件來源的內(nèi)容均為轉(zhuǎn)載稿或由企業(yè)用戶注冊發(fā)布,本網(wǎng)轉(zhuǎn)載出于傳遞更多信息的目的;如轉(zhuǎn)載稿涉及版權(quán)問題,請作者聯(lián)系我們,同時對于用戶評論等信息,本網(wǎng)并不意味著贊同其觀點或證實其內(nèi)容的真實性。
三、轉(zhuǎn)載本站原創(chuàng)文章請注明來源:中華廚具網(wǎng)

0相關評論
今日熱點文章更多
品牌聚焦更多
推薦品牌更多
熱門頻道
關閉廣告
合作伙伴:
中華廚具網(wǎng) 魯ICP備2021046805號         魯公網(wǎng)安備 37162502000363號 (c)2018-2025SYSTEM All Rights Reserved 投資有風險 加盟需謹慎
關閉廣告
關閉廣告
亚洲AV无码一区东京热久久| 久久午夜伦鲁片免费无码| 国产成人久久精品麻豆一区| 99热都是精品久久久久久| 午夜精品久久久久久影视riav| 精品综合久久久久久98| 久久精品国产99久久久| 欧美精品一区二区久久| 久久99精品久久久久久久不卡| 久久亚洲色一区二区三区| 久久久久99精品成人片欧美| 久久久黄片| 国产精品久久久久AV福利动漫| 亚洲国产天堂久久久久久| 国产精品久久久久影院色| 少妇熟女久久综合网色欲| 国产精品丝袜久久久久久不卡| 蜜臀久久99精品久久久久久小说| 亚洲国产精品嫩草影院久久| 国产成人久久久精品二区三区| 99国产欧美久久久精品蜜芽| 伊色综合久久之综合久久| 精品乱码久久久久久夜夜嗨| 97久久精品无码一区二区| 婷婷伊人久久大香线蕉AV| 亚洲综合久久夜AV | 免费精品久久久久久中文字幕| 久久国产高清字幕中文| 成人综合伊人五月婷久久| 久久精品国产亚洲AV影院| 久久天天躁狠狠躁夜夜不卡 | av无码久久久久不卡免费网站 | 久久精品视屏| 国产精品无码久久四虎| 欧美色综合久久久久久| 久久久精品国产亚洲成人满18免费网站| 精品久久久久久国产91| 久久精品国产99久久久| 成人精品一区二区久久| 精品久久综合1区2区3区激情| 久久久受www免费人成|