国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微服務(wù):Springboot集成Hystrix實(shí)現(xiàn)熔斷、降級(jí)、隔離

這篇具有很好參考價(jià)值的文章主要介紹了微服務(wù):Springboot集成Hystrix實(shí)現(xiàn)熔斷、降級(jí)、隔離。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

在分布式微服務(wù)的項(xiàng)目中,常常會(huì)有多個(gè)服務(wù)復(fù)用,產(chǎn)生多個(gè)服務(wù)調(diào)用的情況。比如A服務(wù)調(diào)用B服務(wù),B服務(wù)調(diào)用C服務(wù)。服務(wù)調(diào)用鏈路長(zhǎng)了必然會(huì)增加服務(wù)超時(shí)的概率,服務(wù)的超時(shí)阻塞會(huì)一直占用線程資源,大量的阻塞會(huì)直接消耗完服務(wù)線程,嚴(yán)重情況下會(huì)導(dǎo)致服務(wù)直接宕機(jī)從而引發(fā)調(diào)用鏈路的服務(wù)雪崩。那么,有沒(méi)有一種方式可以實(shí)現(xiàn)服務(wù)熔斷、降低、隔離呢?今天我們介紹Netflix公司研發(fā)的Hystrix框架。

知識(shí)積累

Hystrix是一個(gè)延遲和容錯(cuò)庫(kù),旨在隔離遠(yuǎn)程系統(tǒng)、服務(wù)和第三方庫(kù)的訪問(wèn)點(diǎn),停止級(jí)聯(lián)故障,并在故障不可避免的復(fù)雜分布式系統(tǒng)中實(shí)現(xiàn)彈性。

服務(wù)熔斷是在服務(wù)達(dá)到某些特定指標(biāo)主動(dòng)進(jìn)行斷開(kāi)的一種操作,而服務(wù)降級(jí)則是在服務(wù)調(diào)用過(guò)程中對(duì)后續(xù)服務(wù)進(jìn)行評(píng)估比如達(dá)到超時(shí)時(shí)間未響應(yīng)就會(huì)進(jìn)行后續(xù)冗余邏輯處理。服務(wù)熔斷了必定會(huì)進(jìn)行服務(wù)降級(jí),但服務(wù)降級(jí)了并不一定是服務(wù)熔斷觸發(fā)。

服務(wù)雪崩是業(yè)務(wù)流程中多個(gè)服務(wù)進(jìn)行鏈路調(diào)用,如果后續(xù)鏈路服務(wù)發(fā)生故障阻塞會(huì)影響調(diào)用方服務(wù)阻塞,嚴(yán)重情況下會(huì)直接將整個(gè)鏈路服務(wù)拖死,從而造成服務(wù)雪崩的現(xiàn)象。

Hystrix提供了信號(hào)量、線程兩種隔離模式。信號(hào)量隔離直接可以限制服務(wù)的并發(fā)線程數(shù)目,而線程隔離則直接依靠線程池來(lái)限制當(dāng)前負(fù)載直接使用當(dāng)前線程池線程,從而避免消耗完服務(wù)的其他線程造成服務(wù)不可用的情況。默認(rèn)情況下,Hystrix使用線程隔離,線程隔離才是真正意義上的服務(wù)隔離。

在實(shí)際的項(xiàng)目開(kāi)發(fā)中,Hystrix與openfeign能夠友好的集成。我們?cè)赟pringboot、spring cloud項(xiàng)目中可以直接引入Hystrix、feign依賴(lài),并且完成相應(yīng)的配置即可達(dá)到我們需要的結(jié)果。

Springboot集成Hystrix

在微服務(wù)的開(kāi)發(fā)中為了服務(wù)間的互相復(fù)用與調(diào)用,我們需要引入注冊(cè)中心來(lái)幫助實(shí)現(xiàn)服的發(fā)布、訂閱與維護(hù)。對(duì)于注冊(cè)中心中間件的選擇有nacos、consul等等,其中搭建都相對(duì)簡(jiǎn)單這里不再講述。

當(dāng)我們引入注冊(cè)中心后我們直接可以使用feign框架通過(guò)RestTemplate直接調(diào)用服務(wù),我們不再關(guān)心內(nèi)部怎么調(diào)用,只需要按照特定的規(guī)則封裝接口即可。

以下重點(diǎn)介紹Hystrix的相關(guān)集成和配置

1、maven依賴(lài)引入

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
    <relativePath/>
</parent>
<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Hoxton.SR10</spring-cloud.version>
</properties>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2、application開(kāi)啟feign的hystrix支持(客戶端配置限流降級(jí)熔斷)

#hystrix
feign:
  hystrix:
    enabled: true
  circuitbreaker:
    enabled: true

hystrix:
  threadpool:
    #默認(rèn)配置
    default:
      #動(dòng)態(tài)調(diào)整線程數(shù)
      allowMaximumSizeToDivergeFromCoreSize: false
      #核心線程數(shù)
      coreSize: 10
      #最大線程數(shù)
      maximumSize: 10
      #空閑存活時(shí)間min
      keepAliveTimeMinutes: 1
      #隊(duì)列長(zhǎng)度 設(shè)置置為-1時(shí),隊(duì)列會(huì)使用 SynchronousQueue,此時(shí)其 size 為0,Hystrix 不會(huì)向隊(duì)列內(nèi)存放作業(yè)。
      maxQueueSize: -1
      #如果需要?jiǎng)討B(tài)修改隊(duì)列長(zhǎng)度的話可以設(shè)置此值,即使隊(duì)列未滿,隊(duì)列內(nèi)作業(yè)達(dá)到此值時(shí)同樣會(huì)拒絕請(qǐng)求。此值默認(rèn)是 5
      queueSizeRejectionThreshold: 5
  command:
    default:
      #線程池key
      threadPoolKeyOverride: default
      #熔斷器
      circuitBreaker:
        enabled: true
        #錯(cuò)誤占比
        errorThresholdPercentage: 50
        #窗口時(shí)間內(nèi)最小請(qǐng)求數(shù)目
        requestVolumeThreshold: 20
        #休眠時(shí)間
        sleepWindowInMilliseconds: 5000
      execution:
        #隔離
        isolation:
          strategy: THREAD
          thread:
            #線程超時(shí)時(shí)間
            timeoutInMilliseconds: 5000
        timeout:
          enabled: true
      #統(tǒng)計(jì)器
      metrics:
        rollingStats:
          #窗口大小
          timeInMilliseconds: 10000
          #桶數(shù)目需要保證與timeInMilliseconds整除
          numBuckets: 10

3、入口類(lèi)增加@EnableFeignClients @EnableHystrix 開(kāi)啟feign與hystrix

@EnableFeignClients
@EnableHystrix
@Slf4j
public class TestDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestDemoApplication.class, args);
    }
}

4、feign調(diào)用增加降級(jí)方法

/**
 * @author senfel
 * @version 1.0
 * @date 2023/7/03 15:04
 */
@Service
@FeignClient(value = "test-demo",fallback = FallbackService.class)
public interface TestService {

    /**
     * 測(cè)試hystrix
     */
    @GetMapping("/feign")
    String feign(@RequestParam String str);


}
/**
 * FallbackService
 * @author senfel
 * @version 1.0
 * @date 2023/7/3 15:26
 */
@Service
public class FallbackService implements TestService {

    @Override
    public String feign(String str) {
        return ">>>>>客戶端服務(wù)降級(jí)>>>>>";
    }
}

服務(wù)端配置限流降級(jí)熔斷(選擇使用)

線程隔離、
服務(wù)調(diào)用超時(shí)5s降級(jí)、
10s內(nèi)最低20個(gè)請(qǐng)求進(jìn)入規(guī)則驗(yàn)證超過(guò)50%錯(cuò)誤率直接熔斷5s

@GetMapping("/feign")
@HystrixCommand(
        // 標(biāo)識(shí)線程池 保持唯一
        threadPoolKey = "threadPoolKeyByFeign",
        // 線程池細(xì)節(jié)屬性配置
        threadPoolProperties = {
                // 線程數(shù)
                @HystrixProperty(name="coreSize",value = "10"),
                //最大線程數(shù)量
                @HystrixProperty(name="maximumSize",value = "10"),
                // 等待隊(duì)列長(zhǎng)度
                @HystrixProperty(name="maxQueueSize",value="-1"),
                //如果需要?jiǎng)討B(tài)修改隊(duì)列長(zhǎng)度的話可以設(shè)置此值,即使隊(duì)列未滿,隊(duì)列內(nèi)作業(yè)達(dá)到此值時(shí)同樣會(huì)拒絕請(qǐng)求。此值默認(rèn)是 5
                @HystrixProperty(name="queueSizeRejectionThreshold",value="5"),
                //空閑時(shí)間1min
                @HystrixProperty(name="keepAliveTimeMinutes",value="1")
        },
        // 熔斷的一些細(xì)節(jié)屬性配置
        commandProperties = {
                // 調(diào)用服務(wù)超時(shí)時(shí)間
                @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="5000"),
                // 統(tǒng)計(jì)時(shí)間窗口定義
                @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds",value = "10000"),
                //桶數(shù)量 保證與統(tǒng)計(jì)時(shí)間窗口整除
                @HystrixProperty(name = "metrics.rollingPercentile.numBuckets",value = "10"),
                // 統(tǒng)計(jì)時(shí)間窗口內(nèi)的最小請(qǐng)求數(shù)
                @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "20"),
                // 統(tǒng)計(jì)時(shí)間窗口內(nèi)的錯(cuò)誤數(shù)量百分比閾值
                @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "50"),
                // 自我修復(fù)時(shí)的活動(dòng)窗口長(zhǎng)度
                @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "5000")
        },
        // 降級(jí)方法
        fallbackMethod = "myFallBack"
)
public String feign(String str){
    if(str.contains("s")){
        throw new RuntimeException();
    }
    return str+"ssss";
}

private String myFallBack(String str){
    return ">>>>>服務(wù)端服務(wù)降級(jí)>>>>>";
}

Springboot集成Hystrix可視化

1、增加maven依賴(lài)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

2、application配置監(jiān)控

hystrix:
  dashboard:
    proxy-stream-allow-list: "127.0.0.1"
    
management:
  endpoints:
    web:
      exposure:
        include: health,hystrix.stream    

3、頁(yè)面訪問(wèn)hystrix-dashboard

http://127.0.0.1:9999/hystrix
微服務(wù):Springboot集成Hystrix實(shí)現(xiàn)熔斷、降級(jí)、隔離,hystrix,Spring,微服務(wù),spring boot,hystrix

http://127.0.0.1:9999/actuator/hystrix.stream
微服務(wù):Springboot集成Hystrix實(shí)現(xiàn)熔斷、降級(jí)、隔離,hystrix,Spring,微服務(wù),spring boot,hystrix

寫(xiě)在最后

Springboot集成Hystrix實(shí)現(xiàn)熔斷、降級(jí)、隔離較為簡(jiǎn)單,并且提供了hystrix-dashboard可視化儀表盤(pán)。Hystrix框架已經(jīng)實(shí)現(xiàn)了熔斷降級(jí)、隔離策略,我們集成后只需要根據(jù)自身情況進(jìn)行配置選用即可。一般在微服務(wù)架構(gòu)優(yōu)先選擇客戶端熔斷降級(jí),當(dāng)然也可在服務(wù)端進(jìn)行注解配置。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-532657.html

到了這里,關(guān)于微服務(wù):Springboot集成Hystrix實(shí)現(xiàn)熔斷、降級(jí)、隔離的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 實(shí)戰(zhàn):Springboot集成Sentinel實(shí)現(xiàn)流量控制、熔斷降級(jí)、負(fù)載保護(hù)

    實(shí)戰(zhàn):Springboot集成Sentinel實(shí)現(xiàn)流量控制、熔斷降級(jí)、負(fù)載保護(hù)

    前面的文章我們學(xué)習(xí)了Hystrix并和springboot項(xiàng)目進(jìn)行了集成,實(shí)現(xiàn)服務(wù)的熔斷降級(jí)、隔離措施。但是Hystrix對(duì)流量的控制不是很好,僅僅信號(hào)量也只能對(duì)指定的接口進(jìn)行限流,至于保護(hù)機(jī)制Hystrix也只是達(dá)到指標(biāo)進(jìn)行熔斷。那么,有沒(méi)有一種中間件可以在兼容熔斷降級(jí)的同時(shí)精準(zhǔn)實(shí)

    2024年02月16日
    瀏覽(22)
  • 云原生微服務(wù) Spring Cloud Hystrix 降級(jí)、熔斷實(shí)戰(zhàn)應(yīng)用

    云原生微服務(wù) Spring Cloud Hystrix 降級(jí)、熔斷實(shí)戰(zhàn)應(yīng)用

    第一章 Java線程池技術(shù)應(yīng)用 第二章 CountDownLatch和Semaphone的應(yīng)用 第三章 Spring Cloud 簡(jiǎn)介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Spring Cloud Netflix 之 Hystrix 多個(gè)微服務(wù)之間調(diào)用的時(shí)候,假如微服

    2024年02月08日
    瀏覽(29)
  • 【OpenFeign】OpenFeign結(jié)合Hystrix和Sentinel實(shí)現(xiàn)熔斷降級(jí)

    OpenFeign可以與Hystrix和Sentinel結(jié)合使用,實(shí)現(xiàn)降級(jí)和熔斷。 使用OpenFeign需要引入OpenFeign的依賴(lài): spring-cloud-starter-openfeign 引入的依賴(lài)如下: 默認(rèn)已經(jīng)自動(dòng)引入了hystrix的依賴(lài),不再需要單獨(dú)再引入hystrix了。 降級(jí)方法的類(lèi)需要實(shí)現(xiàn)FeignClient的接口,同時(shí)這個(gè)類(lèi)需要注入到Spring容器

    2024年02月11日
    瀏覽(30)
  • 【從0到1設(shè)計(jì)一個(gè)網(wǎng)關(guān)】基于Hystrix實(shí)現(xiàn)熔斷降級(jí)

    上文我們已經(jīng)成功實(shí)現(xiàn)了請(qǐng)求重試與請(qǐng)求限流,接下來(lái)我們開(kāi)始實(shí)現(xiàn)熔斷與服務(wù)降級(jí)。 熔斷與服務(wù)降級(jí),在SpringCloud中設(shè)計(jì)到的就是我們的hystrix,這里我們也將會(huì)考慮配合hystrix來(lái)實(shí)現(xiàn)熔斷與服務(wù)降級(jí)。 如果不了解hystix的可以先進(jìn)行一下了解。 由于這里我是用的是基于hystr

    2024年02月05日
    瀏覽(22)
  • SpringCloud-Hystrix服務(wù)熔斷與降級(jí)工作原理&源碼 | 京東物流技術(shù)團(tuán)隊(duì)

    SpringCloud-Hystrix服務(wù)熔斷與降級(jí)工作原理&源碼 | 京東物流技術(shù)團(tuán)隊(duì)

    在微服務(wù)架構(gòu)中,根據(jù)業(yè)務(wù)來(lái)拆分成一個(gè)個(gè)的服務(wù),服務(wù)與服務(wù)之間可以相互調(diào)用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign來(lái)調(diào)用。為了保證其高可用,單個(gè)服務(wù)通常會(huì)集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個(gè)服務(wù)出現(xiàn)問(wèn)題,調(diào)用這

    2024年02月14日
    瀏覽(26)
  • 微服務(wù)springcloud 06.feign框架,配合ribbon 負(fù)載均衡和重試,配合hystrix 降級(jí),監(jiān)控和熔斷測(cè)試

    微服務(wù)springcloud 06.feign框架,配合ribbon 負(fù)載均衡和重試,配合hystrix 降級(jí),監(jiān)控和熔斷測(cè)試

    feign是ribbon +hystrix 的整合 01.新建 sp09-feign 項(xiàng)目 第一步: 第二步:選擇依賴(lài): pom.xml 需要添加 sp01-commons 依賴(lài): 第三步:修改sp09-feign項(xiàng)目的application.yml 第四步:sp09-feign的主程序添加 @EnableDiscoveryClient 和 @EnableFeignClients 02.feign 聲明式客戶端 第一步:聲明三個(gè)代理接口 這里的

    2024年02月10日
    瀏覽(22)
  • springboot整合feign實(shí)現(xiàn)RPC調(diào)用,并通過(guò)Hystrix實(shí)現(xiàn)服務(wù)降級(jí)

    springboot整合feign實(shí)現(xiàn)RPC調(diào)用,并通過(guò)Hystrix實(shí)現(xiàn)服務(wù)降級(jí)

    feign/openfeign和dubbo是常用的微服務(wù)RPC框架,由于feigin內(nèi)部已經(jīng)集成ribbon,自帶了負(fù)載均衡的功能,當(dāng)有多個(gè)同名的服務(wù)注冊(cè)到注冊(cè)中心時(shí),會(huì)根據(jù)ribbon默認(rèn)的負(fù)載均衡算法將請(qǐng)求分配到不同的服務(wù)。這篇文章就簡(jiǎn)單介紹一下怎么使用feign來(lái)調(diào)用遠(yuǎn)程的服務(wù)。 首先,需要有一個(gè)

    2024年02月16日
    瀏覽(28)
  • 【微服務(wù)篇】深入理解資源隔離,限流,熔斷原理(Hystrix、Resilience4j和Sentinel)

    限流、降級(jí)和資源隔離 是分布式系統(tǒng)設(shè)計(jì)中常用的三種技術(shù)手段,它們主要目的是增強(qiáng)系統(tǒng)的穩(wěn)定性和可用性,尤其在高并發(fā)和不穩(wěn)定網(wǎng)絡(luò)環(huán)境下顯得尤為重要 資源隔離通常有兩種主要的實(shí)現(xiàn)方式: 線程池隔離和信號(hào)量隔離 。 線程池隔離 線程池隔離是通過(guò)為每個(gè)微服務(wù)或

    2024年04月11日
    瀏覽(26)
  • Dubbo hystrix 熔斷降級(jí) 示例

    Dubbo hystrix 熔斷降級(jí) 示例

    目錄 Pom 應(yīng)用啟動(dòng)類(lèi) 接口 服務(wù)提供者 消費(fèi)者 總結(jié) 因?yàn)閖ar包沖突問(wèn)題報(bào)錯(cuò)?java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.([Ljava/lang/Object;)V 解決方式修改低版本springboot 改成如下 版本對(duì)照 全代碼 pom 啟動(dòng) 實(shí)現(xiàn) yml 有需要加上這個(gè) 有超時(shí)熔斷跳轉(zhuǎn)到 reliable

    2024年02月12日
    瀏覽(28)
  • Hystrix和Sentinel熔斷降級(jí)設(shè)計(jì)理念

    Hystrix和Sentinel熔斷降級(jí)設(shè)計(jì)理念

    Sentinel 和 Hystrix 的原則是一致的: 當(dāng)檢測(cè)到調(diào)用鏈路中某個(gè)資源出現(xiàn)不穩(wěn)定的表現(xiàn),例如請(qǐng)求響應(yīng)時(shí)間長(zhǎng)或異常比例升高的時(shí)候,則對(duì)這個(gè)資源的調(diào)用進(jìn)行限制,讓請(qǐng)求快速失敗,避免影響到其它的資源而導(dǎo)致級(jí)聯(lián)故障。 Sentinel 對(duì)這個(gè)問(wèn)題采取了兩種手段: 通過(guò)并發(fā)線程數(shù)進(jìn)

    2024年02月09日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包