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

SpringCloud微服務(wù)熔斷器使用詳解

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

一、簡(jiǎn)介

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

熔斷的目的:保護(hù)微服務(wù)集群

二、作用

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

三、核心概念

3.1 熔斷目的

應(yīng)對(duì)雪崩效應(yīng),快速失敗,快速恢復(fù)

3.2 降級(jí)目的

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

四、實(shí)例

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ā)降級(jí)

@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"),  // 默認(rèn)20, 最小產(chǎn)生5次請(qǐng)求
                    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "5000"), // 熔斷時(shí)間, 該時(shí)間內(nèi)快速失敗
                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"), // 10s內(nèi)失敗率達(dá)到50%觸發(fā)熔斷
            }, // 10s 內(nèi)最少 5 個(gè)請(qǐng)求, 如果失敗率大于 50% 則觸發(fā)熔斷
            fallbackMethod = "fallback"
    )  // 服務(wù)調(diào)用失敗時(shí),觸發(fā)熔斷進(jìn)行降級(jí)
    @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();
    }
    /**
     * 熔斷時(shí)觸發(fā)降級(jí)
     *
     * @param num 參數(shù)
     * @return 字符串
     */
    private String fallback(Integer num) {
        // 降級(jí)操作
        return "系統(tǒng)繁忙";
    }
}

4.1.2 超時(shí)觸發(fā)降級(jí)

@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);
    }
    /**
     * 超時(shí)時(shí)觸發(fā)降級(jí)
     *
     * @return 字符串
     */
    private String timeout() {
        // 降級(jí)操作
        return "請(qǐng)求超時(shí)";
    }
}

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

平臺(tái)隔離、業(yè)務(wù)隔離、部署隔離

線程池隔離、信號(hào)量隔離

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"  // 當(dāng)前模塊啟動(dòng)目錄
})
@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();   // 遠(yuǎn)程調(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 "請(qǐng)求失敗";
    }
    @Override
    public Map createProduction(Object production) {
        return new HashMap<>();
    }
    @Override
    public Object selectByProduct(Object product) {
        return "請(qǐng)求失敗";
    }
}

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

相關(guān)文章

  • Java筆記之從IO模型到Netty框架學(xué)習(xí)初識(shí)篇

    Java筆記之從IO模型到Netty框架學(xué)習(xí)初識(shí)篇

    Netty作為一個(gè)已經(jīng)發(fā)展了十多年的框架,已然非常成熟了,其中有大量的細(xì)節(jié)是普通使用者不知道或者不關(guān)心的,本文帶你查缺補(bǔ)漏掌握Netty的使用
    2022-03-03
  • Spring中@Configuration注解和@Component注解的區(qū)別詳解

    Spring中@Configuration注解和@Component注解的區(qū)別詳解

    這篇文章主要介紹了Spring中@Configuration注解和@Component注解的區(qū)別詳解,@Configuration 和 @Component 到底有何區(qū)別呢?我先通過如下一個(gè)案例,在不分析源碼的情況下,小伙伴們先來直觀感受一下這兩個(gè)之間的區(qū)別,需要的朋友可以參考下
    2023-09-09
  • Springboot如何基于assembly服務(wù)化實(shí)現(xiàn)打包

    Springboot如何基于assembly服務(wù)化實(shí)現(xiàn)打包

    這篇文章主要介紹了Springboot如何基于assembly服務(wù)化實(shí)現(xiàn)打包,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • spring-boot中使用spring-boot-devtools的實(shí)現(xiàn)代碼

    spring-boot中使用spring-boot-devtools的實(shí)現(xiàn)代碼

    這篇文章主要介紹了spring-boot中使用spring-boot-devtools的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java語法基礎(chǔ)之循環(huán)結(jié)構(gòu)語句詳解

    Java語法基礎(chǔ)之循環(huán)結(jié)構(gòu)語句詳解

    這篇文章主要為大家詳細(xì)介紹了Java語法基礎(chǔ)之循環(huán)結(jié)構(gòu)語句,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 在Spring中如何處理循環(huán)依賴問題

    在Spring中如何處理循環(huán)依賴問題

    Spring解決循環(huán)依賴的關(guān)鍵在于提前曝光未完全創(chuàng)建的bean,在Spring中創(chuàng)建Bean分為實(shí)例化、屬性填充和初始化三步,循環(huán)依賴的解決思路是先創(chuàng)建A的bean實(shí)例,此時(shí)A是不完整的,用一個(gè)Map保存不完整的A,再創(chuàng)建B,B需要注入A
    2025-01-01
  • SpringBoot 如何從配置文件讀取值到對(duì)象中

    SpringBoot 如何從配置文件讀取值到對(duì)象中

    這篇文章主要介紹了SpringBoot 如何從配置文件讀取值到對(duì)象中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中BeanUtils.copyProperties基本用法與小坑

    Java中BeanUtils.copyProperties基本用法與小坑

    本文主要介紹了Java中BeanUtils.copyProperties基本用法與小坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • elasticsearch集群查詢超10000的解決方案

    elasticsearch集群查詢超10000的解決方案

    ES為了避免用戶的過大分頁(yè)請(qǐng)求造成ES服務(wù)所在機(jī)器內(nèi)存溢出,默認(rèn)對(duì)深度分頁(yè)的條數(shù)進(jìn)行了限制,默認(rèn)的最大條數(shù)是10000條,這篇文章主要給大家介紹了關(guān)于elasticsearch集群查詢超10000的解決方案,需要的朋友可以參考下
    2024-08-08
  • Java中ArrayList和LinkedList有什么區(qū)別舉例詳解

    Java中ArrayList和LinkedList有什么區(qū)別舉例詳解

    這篇文章主要介紹了Java中ArrayList和LinkedList區(qū)別的相關(guān)資料,包括數(shù)據(jù)結(jié)構(gòu)特性、核心操作性能、內(nèi)存與GC影響、擴(kuò)容機(jī)制、線程安全與并發(fā)方案,以及工程實(shí)踐場(chǎng)景,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02

最新評(píng)論

苍山县| 墨竹工卡县| 南汇区| 永丰县| 方正县| 尼玛县| 邹平县| 天全县| 南川市| 白银市| 重庆市| 沙雅县| 福安市| 安岳县| 宜兰市| 阳原县| 上栗县| 宁陵县| 绥棱县| 平谷区| 丽水市| 合阳县| 淄博市| 都昌县| 德格县| 浪卡子县| 潍坊市| 达孜县| 河源市| 漳州市| 当阳市| 金门县| 恩平市| 游戏| 专栏| 淳安县| 巴林右旗| 陈巴尔虎旗| 万山特区| 什邡市| 嵊州市|