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

【微服務筆記10】微服務組件之Hystrix實現(xiàn)服務降級和服務熔斷

這篇具有很好參考價值的文章主要介紹了【微服務筆記10】微服務組件之Hystrix實現(xiàn)服務降級和服務熔斷。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這篇文章,主要介紹微服務組件之Hystrix實現(xiàn)服務降級和服務熔斷。

目錄

一、服務降級

1.1、什么是服務降級

1.2、實現(xiàn)服務降級

(1)引入依賴

(2)編寫Service層代碼

(3)編寫Controller層代碼

(4)運行測試

(5)fallbackMethod屬性

二、服務熔斷

2.1、什么是服務熔斷

2.2、實現(xiàn)服務熔斷

(1)引入依賴

(2)編寫Service層代碼

(3)編寫Controller層代碼

(4)運行測試


一、服務降級

1.1、什么是服務降級

服務降級:發(fā)生在客戶端側,當某個微服務自身出現(xiàn)大量的請求,從而沒辦法處理過來的時候,這個時候可以采取某種策略,將那些不重要的請求直接中斷,返回事先定義好的fallback方法(可以叫做兜底方法),這樣就可以為那些核心業(yè)務接口提供更多的資源。

服務降級是最簡單的一種實現(xiàn)方式,那什么情況下會出發(fā)服務降級呢???

  • 第一種情況:當出現(xiàn)【HystrixBadRequestException】之外的異常時候,就會觸發(fā)服務降級。
  • 第二種情況:當接口方法調用超時,觸發(fā)服務降級。
  • 第三種情況:熔斷器開啟的時候。
  • 第四種情況:線程池、隊列、信號量已經(jīng)達到最大值的時候。

1.2、實現(xiàn)服務降級

(1)引入依賴

<!--hystrix 依賴-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

(2)編寫Service層代碼

  • 在service層中需要開啟服務降級的方法上面,使用【@HystrixCommand】注解,并且通過【fallbackMethod】屬性指定降級之后的兜底方法。
package com.gitcode.hystrix.service;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.stereotype.Service;

/**
 * @version 1.0.0
 * @Date: 2023/4/10 21:47
 * @Author ZhuYouBin
 * @Description 服務降級
 */
@Service
public class HystrixFallbackService {

    /**
     * 標記當前方法開啟服務降級
     */
    @HystrixCommand(fallbackMethod = "reductionGradeFallback")
    public String reductionGrade(String id) {
        if (id.equals("1001")) {
            throw new RuntimeException("模擬業(yè)務異常");
        }
        System.out.println("模擬調用其他微服務接口......");
        return "success.";
    }

    /**
     * fallback 方法,必須和 @HystrixCommand 注解標記的方法具備相同的【參數(shù)列表】、【返回值類型】
     */
    private String reductionGradeFallback(String id) {
        System.out.println("服務降級,請稍后重試!");
        return "服務降級,請稍后重試!";
    }
}

(3)編寫Controller層代碼

package com.gitcode.hystrix.controller;

import com.gitcode.hystrix.service.HystrixFallbackService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @version 1.0.0
 * @Date: 2023/4/10 21:46
 * @Author ZhuYouBin
 * @Description 服務降級
 */
@RestController
@RequestMapping("/hystrix/fallback")
public class HystrixFallbackController {

    @Autowired
    private HystrixFallbackService hystrixFallbackService;

    @GetMapping("/reduce")
    public String reductionGrade(String id) {
        return hystrixFallbackService.reductionGrade(id);
    }

}

(4)運行測試

啟動工程,瀏覽器訪問【http://127.0.0.1:9898/hystrix/fallback/reduce?id=1001】時候,此時會拋出異常,觸發(fā)服務降級功能;修改id為其他的值,可以正常調用。

【微服務筆記10】微服務組件之Hystrix實現(xiàn)服務降級和服務熔斷

(5)fallbackMethod屬性

fallbackMethod屬性用于指定服務降級或者熔斷之后,調用的備選方法,在這個方法里面,我們可以根據(jù)具體的業(yè)務場景返回一些模擬數(shù)據(jù)。例如:當接口出現(xiàn)降級或者熔斷之后,可以從緩存里面、從數(shù)據(jù)庫里面查詢備選數(shù)據(jù),返回給客戶端。fallbackMethod 屬性指定的方法必須滿足下面這些規(guī)則:

  • 1. 方法必須和 @HystrixCommand 注解標記的方法在【同一個類】里面。
  • 2. 方法的【參數(shù)列表】必須和 @HystrixCommand 注解標記的方法參數(shù)列表相同。
  • 3. 方法的【返回值類型】必須和 @HystrixCommand 注解標記的方法返回值相同。

二、服務熔斷

2.1、什么是服務熔斷

服務熔斷:發(fā)生在服務端側,當某個微服務出現(xiàn)故障導致服務不可用的時候,此時調用端服務發(fā)現(xiàn)服務不可用,此時就會開啟熔斷機制,阻斷所有請求服務端的請求,直接返回事先定義好的fallback方法。

服務熔斷,就像是電路中的保險絲一樣,當發(fā)現(xiàn)下游系統(tǒng)服務不可用的時候,此時hystrix就會開啟熔斷器,阻斷所有調用下游系統(tǒng)的接口,直接返回fallback方法。如果沒有設置fallback方法,則會執(zhí)行默認的返回策略。

熔斷器機制,hystrix提供了熔斷器,它的工作原理大致如下所示:

  • 當調用下游服務接口正常時候,不會開啟熔斷器機制。
  • 當調用下游服務接口的次數(shù)超過20個,并且接口調用失敗率超過50%,那么此時就會開啟熔斷器。
  • 一旦熔斷器開啟之后,微服務就不會繼續(xù)調用下游系統(tǒng)接口,而是直接返回fallback指定的兜底方法(默認指定就執(zhí)行默認的方式)。
  • 但是熔斷器不能一直處于熔斷狀態(tài),必須有重新開啟的時候,所以hystrix會默認每隔【5秒】嘗試調用下游系統(tǒng),判斷下游系統(tǒng)服務是否可用。
  • 當hystrix發(fā)現(xiàn)下游系統(tǒng)服務重新可用的時候,此時就會關閉熔斷器。

【微服務筆記10】微服務組件之Hystrix實現(xiàn)服務降級和服務熔斷

服務降級和服務熔斷都可以使用一個事先準備好的fallback方法,這就相當于是一個后備方案,只不過這個方案不是正確的業(yè)務結果,但是通過這種方式,可以提高系統(tǒng)的可用性,為什么可以提高性能呢?可以這么想,因為每次請求到達服務器之后,都是直接返回fallback的結果,而不需要發(fā)起一個HTTP請求去調用另外一個微服務,所以這就減少了請求的次數(shù)。

2.2、實現(xiàn)服務熔斷

(1)引入依賴

<!--hystrix 依賴-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

(2)編寫Service層代碼

package com.gitcode.hystrix.service;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import com.netflix.hystrix.contrib.javanica.conf.HystrixPropertiesManager;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

/**
 * @version 1.0.0
 * @Date: 2023/4/10 21:47
 * @Author ZhuYouBin
 * @Description 服務熔斷
 */
@Service
public class HystrixCircuitBreakerService {

    /**
     * 標記當前方法開啟服務降級
     */
    @HystrixCommand(
            commandProperties = {
                    // 啟用熔斷器
                    @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ENABLED, value = "true"),
                    // 設置請求線程數(shù)量,默認是20個時候,發(fā)生熔斷,這設置成5個
                    @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "5"),
                    // 請求線程失敗的比率,默認是大于50%時候發(fā)生熔斷
                    @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "50"),
                    // 熔斷機制重試策略的時間間隔,默認是5秒重試一次
                    @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "5"),
            },
            fallbackMethod = "circuitBreakFallback"
    )
    public String circuitBreaker(String id) {
        if (id.equals("1001")) {
            throw new RuntimeException("模擬業(yè)務異常");
        }
        System.out.println("模擬調用其他微服務接口......當前時間:" + LocalDateTime.now());
        return "success.";
    }

    /**
     * fallback 方法,必須和 @HystrixCommand 注解標記的方法具備相同的【參數(shù)列表】、【返回值類型】
     */
    private String circuitBreakFallback(String id) {
        System.out.println("服務熔斷降級,請稍后重試!");
        return "服務熔斷降級,請稍后重試!";
    }
}

(3)編寫Controller層代碼

package com.gitcode.hystrix.controller;

import com.gitcode.hystrix.service.HystrixCircuitBreakerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @version 1.0.0
 * @Date: 2023/4/10 21:46
 * @Author ZhuYouBin
 * @Description 服務熔斷
 */
@RestController
@RequestMapping("/hystrix/fallback")
public class HystrixCircuitBreakerController {

    @Autowired
    private HystrixCircuitBreakerService service;

    @GetMapping("/breaker")
    public String circuitBreaker(String id) {
        return service.circuitBreaker(id);
    }

}

(4)運行測試

啟動工程,瀏覽器訪問【http://127.0.0.1:9898/hystrix/fallback/breaker?id=1001】,多訪問幾次,此時會導致hystrix開啟熔斷器,然后在訪問id不是1001的請求,查看控制臺輸出結果。

【微服務筆記10】微服務組件之Hystrix實現(xiàn)服務降級和服務熔斷

到此,Hystrix中服務降級和服務熔斷功能就介紹完啦。

綜上,這篇文章結束了,主要介紹微服務組件之Hystrix實現(xiàn)服務降級和服務熔斷。文章來源地址http://www.zghlxwxcb.cn/news/detail-410363.html

到了這里,關于【微服務筆記10】微服務組件之Hystrix實現(xiàn)服務降級和服務熔斷的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 云原生微服務 Spring Cloud Hystrix 降級、熔斷實戰(zhàn)應用

    云原生微服務 Spring Cloud Hystrix 降級、熔斷實戰(zhàn)應用

    第一章 Java線程池技術應用 第二章 CountDownLatch和Semaphone的應用 第三章 Spring Cloud 簡介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Spring Cloud Netflix 之 Hystrix 多個微服務之間調用的時候,假如微服

    2024年02月08日
    瀏覽(29)
  • 【微服務筆記21】微服務組件之Sentinel服務熔斷、服務降級、流量控制介紹

    【微服務筆記21】微服務組件之Sentinel服務熔斷、服務降級、流量控制介紹

    這篇文章,主要介紹微服務組件之Sentinel服務熔斷、服務降級、流量控制。 目錄 一、Sentinel組件 1.1、Sentinel介紹 1.2、Sentinel環(huán)境搭建 (1)引入依賴 (2)資源和規(guī)則 1.3、使用SphU定義資源 (1)定義資源 (2)定義規(guī)則 1.4、使用SphO定義資源 (1)定義資源 (2)定義規(guī)則 1.5、

    2024年04月17日
    瀏覽(24)
  • 【從0到1設計一個網(wǎng)關】基于Hystrix實現(xiàn)熔斷降級

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

    2024年02月05日
    瀏覽(22)
  • 【OpenFeign】OpenFeign結合Hystrix和Sentinel實現(xiàn)熔斷降級

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

    2024年02月11日
    瀏覽(30)
  • SpringCloud-Hystrix服務熔斷與降級工作原理&源碼 | 京東物流技術團隊

    SpringCloud-Hystrix服務熔斷與降級工作原理&源碼 | 京東物流技術團隊

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

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

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

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

    2024年02月10日
    瀏覽(22)
  • Dubbo hystrix 熔斷降級 示例

    Dubbo hystrix 熔斷降級 示例

    目錄 Pom 應用啟動類 接口 服務提供者 消費者 總結 因為jar包沖突問題報錯?java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.([Ljava/lang/Object;)V 解決方式修改低版本springboot 改成如下 版本對照 全代碼 pom 啟動 實現(xiàn) yml 有需要加上這個 有超時熔斷跳轉到 reliable

    2024年02月12日
    瀏覽(27)
  • Hystrix和Sentinel熔斷降級設計理念

    Hystrix和Sentinel熔斷降級設計理念

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

    2024年02月09日
    瀏覽(32)
  • 高版本Spring Cloud中OpenFeign整合Hystrix熔斷降級不生效的問題及解決方案

    高版本Spring Cloud中OpenFeign整合Hystrix熔斷降級不生效的問題及解決方案

    本文將介紹在使用高版本Spring Cloud(2020.0.x及以后),由于取消了Hystrix的集成,導致OpenFeign與Hystrix熔斷降級不生效的問題。同時,也將給出解決該問題的方案,即添加feign.circuitbreaker.enabled=true配置。 隨著Spring Cloud框架的發(fā)展,高版本Spring Cloud(2020.0.x及以上)中取消了對Hy

    2024年02月22日
    瀏覽(109)
  • springcloud3 hystrix實現(xiàn)服務降級的案例配置2

    springcloud3 hystrix實現(xiàn)服務降級的案例配置2

    \\\"服務器忙,請稍后在試\\\"不讓客戶達等待,立即返回一個友好的提示。 1.程序運行異常; 2.超時; 3.服務熔斷觸發(fā)服務降級; 4.線程池/信號量打滿也會導致服務降級 2.1.1 pom文件 2.1.2 設置降級規(guī)則 代碼 ?2.1.3 開啟hystrix熔斷 添加:@EnableHystrix 注解 2.2.1 pom文件 2.2.2?設置降級規(guī)

    2024年02月12日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包