欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud微服務熔斷器使用詳解

 更新時間:2022年09月30日 08:32:36   作者:Dily_Su  
這篇文章主要介紹了Spring Cloud Hyxtrix的基本使用,它是Spring Cloud中集成的一個組件,在整個生態(tài)中主要為我們提供服務隔離,服務熔斷,服務降級功能,本文給大家介紹的非常詳細,需要的朋友可以參考下

一、簡介

當微服務中的某個子服務,發(fā)生異常服務器宕機,其他服務在進行時不能正常訪問而一直占用資源導致正常的服務也發(fā)生資源不能釋放而崩潰,這時為了不造成整個微服務群癱瘓,進行的保護機制 就叫做熔斷,是一種降級策略

熔斷的目的:保護微服務集群

二、作用

  • 對第三方訪問的延遲和故障進行保護和控制
  • 防止復雜分布式系統(tǒng)中的雪崩效應(級聯(lián)故障)
  • 快速失敗,快速恢復
  • 回退,盡可能優(yōu)雅的降級
  • 啟用近實時監(jiān)控、報警和操作控制

三、核心概念

3.1 熔斷目的

應對雪崩效應,快速失敗,快速恢復

3.2 降級目的

保證整體系統(tǒng)的高可用性

四、實例

4.1 基于Hystrix

pom.xml

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

application

@EnableHystrix // 開啟熔斷
@SpringBootApplication
public class HystrixApplication {
    public static void main(String[] args) {
        SpringApplication.run(HystrixApplication.class, args);
    }
}

4.1.1 熔斷觸發(fā)降級

@RestController
@RequestMapping("/hystrix")
public class HystrixController {
    @Autowired
    private RestTemplate restTemplate;
    /**
     * @param num 參數(shù)
     * @return 字符串
     */
    @HystrixCommand(
            commandProperties = {
                    @HystrixProperty(name = "circuitBreaker.enabled", value = "true"),
                    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "5"),  // 默認20, 最小產(chǎn)生5次請求
                    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "5000"), // 熔斷時間, 該時間內(nèi)快速失敗
                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"), // 10s內(nèi)失敗率達到50%觸發(fā)熔斷
            }, // 10s 內(nèi)最少 5 個請求, 如果失敗率大于 50% 則觸發(fā)熔斷
            fallbackMethod = "fallback"
    )  // 服務調(diào)用失敗時,觸發(fā)熔斷進行降級
    @GetMapping("/test")
    public String test(@RequestParam Integer num) {
        if (num % 2 == 0) {
            return "訪問正常";
        }
        List<?> list = restTemplate.getForObject("http://localhost:7070/product/list", List.class);
        assert list != null;
        return list.toString();
    }
    /**
     * 熔斷時觸發(fā)降級
     *
     * @param num 參數(shù)
     * @return 字符串
     */
    private String fallback(Integer num) {
        // 降級操作
        return "系統(tǒng)繁忙";
    }
}

4.1.2 超時觸發(fā)降級

@RestController
@RequestMapping("/hystrix")
public class HystrixController {
    @Autowired
    private RestTemplate restTemplate;
    @HystrixCommand(
            commandProperties = {
                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "500")
            },
            fallbackMethod = "timeout"
    )
    @GetMapping("/timeout")
    public String timeoutTest(){
        return restTemplate.getForObject("http://localhost:7070/product/list", String.class);
    }
    /**
     * 超時時觸發(fā)降級
     *
     * @return 字符串
     */
    private String timeout() {
        // 降級操作
        return "請求超時";
    }
}

4.1.3 資源隔離觸發(fā)降級

平臺隔離、業(yè)務隔離、部署隔離

線程池隔離、信號量隔離

4.2 基于OpenFeign pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

application

@SpringBootApplication
@ComponentScan(basePackages = {  
        "com.study.provider.service",  // feign 包目錄
        "com.study.hystrix"  // 當前模塊啟動目錄
})
@EnableFeignClients(basePackages = "com.study.provider.service")  // feign 目錄
public class HystrixApplication {
    public static void main(String[] args) {
        SpringApplication.run(HystrixApplication.class, args);
    }
}

HystrixFeignController

@RestController
@RequestMapping("/hystrixFeign")
public class HystrixFeignController {
    @Qualifier("com.study.provider.service.ProductionService")
    @Autowired
    ProductionService productService;  // feign Client 
    @GetMapping("test")
    public String test(){
        return productService.getProduction(1).toString();   // 遠程調(diào)用
    }
}

feign Client

@FeignClient(value = "provider", fallback = ProductionFallback.class)   // fallback 用于熔斷
public interface ProductionService {
    @RequestMapping("/product/getProduction")
    Object getProduction(@RequestParam Integer id);
}

ProductionFallback

@Component
public class ProductionFallback implements ProductionService {
    @Override
    public Object getProduction(Integer id) {
        return "請求失敗";
    }
    @Override
    public Map createProduction(Object production) {
        return new HashMap<>();
    }
    @Override
    public Object selectByProduct(Object product) {
        return "請求失敗";
    }
}

到此這篇關于SpringCloud微服務熔斷器使用詳解的文章就介紹到這了,更多相關SpringCloud熔斷器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于Spring多數(shù)據(jù)源TransactionManager沖突的解決方案

    關于Spring多數(shù)據(jù)源TransactionManager沖突的解決方案

    這篇文章主要介紹了關于Spring多數(shù)據(jù)源TransactionManager沖突的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Springboot定時任務Scheduled重復執(zhí)行操作

    Springboot定時任務Scheduled重復執(zhí)行操作

    這篇文章主要介紹了Springboot定時任務Scheduled重復執(zhí)行操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 解決spring.thymeleaf.cache=false不起作用的問題

    解決spring.thymeleaf.cache=false不起作用的問題

    這篇文章主要介紹了解決spring.thymeleaf.cache=false不起作用的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 通過Java實現(xiàn)RSA加密與驗證的方法詳解

    通過Java實現(xiàn)RSA加密與驗證的方法詳解

    RSA是一種非對稱加密算法,是目前廣泛應用于加密和數(shù)字簽名領域的一種加密算法,本文主要講述如何通過Java實現(xiàn)RSA加密與驗證,應用場景為與其他平臺對接接口時,通過RSA加密和解密驗證請求的有效性,在對接時雙方互換公鑰,需要的朋友可以參考下
    2023-12-12
  • 詳解Java變量與常量

    詳解Java變量與常量

    這篇文章主要介紹了Java變量與常量,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • springboot配置文件中使用${}注入值的兩種方式小結(jié)

    springboot配置文件中使用${}注入值的兩種方式小結(jié)

    這篇文章主要介紹了springboot配置文件中使用${}注入值的兩種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java任務定時執(zhí)行器案例的實現(xiàn)

    Java任務定時執(zhí)行器案例的實現(xiàn)

    定時器會執(zhí)行指定的任務,本文主要介紹了Java任務定時執(zhí)行器案例的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 三張圖徹底了解Java中字符串的不變性

    三張圖徹底了解Java中字符串的不變性

    這篇文章主要通過三張圖徹底幫助大家了解Java中字符串的不變性,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Idea2020 無法share項目到svn的解決方法

    Idea2020 無法share項目到svn的解決方法

    這篇文章主要介紹了Idea2020 無法share項目到svn的解決方法,需要的朋友可以參考下
    2020-09-09
  • MyBatis Mapper XML中比較操作符轉(zhuǎn)義問題解決

    MyBatis Mapper XML中比較操作符轉(zhuǎn)義問題解決

    在使用MyBatis編寫Mapper XML時,有時會遇到比較操作符需要進行轉(zhuǎn)義的情況,本文主要介紹了MyBatis Mapper XML中比較操作符轉(zhuǎn)義問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01

最新評論