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

SpringBoot熔斷機制之CircuitBreaker詳解

 更新時間:2023年10月08日 10:48:21   作者:代碼行間的無聊生活  
這篇文章主要介紹了SpringBoot熔斷機制之CircuitBreaker詳解,SpringBoot的熔斷機制在微服務(wù)架構(gòu)中扮演著重要角色,其中CircuitBreaker是其核心機制之一,用于防止服務(wù)的異常狀態(tài)影響到整個系統(tǒng)的運作,需要的朋友可以參考下

Circuit Breaker

熔斷機制在微服務(wù)中必不可少,比如故障發(fā)生時怎么處理

熔斷:半熔斷、熔斷打開、熔斷關(guān)閉

  • 熔斷關(guān)閉: 熔斷關(guān)閉不會對服務(wù)進行熔斷,當(dāng)請求服務(wù)失敗次數(shù)符合設(shè)定的規(guī)則則進入熔斷機制
  • 半熔斷: 部分請求根據(jù)規(guī)則調(diào)用當(dāng)前服務(wù),如果請求成功且符合規(guī)則則認(rèn)為當(dāng)前服務(wù)恢復(fù)正常,關(guān)閉熔斷;
  • 熔斷打開:請求不再進行調(diào)用當(dāng)前服務(wù),內(nèi)部設(shè)置時鐘一般為(MTTR:平均故障處理時間),當(dāng)打開時長達到所設(shè)時鐘則進入半熔斷狀態(tài)。
  • 基于服務(wù)策略觸發(fā)

服務(wù)降級

提到熔斷機制還得提下服務(wù)降級服務(wù)降級往往因為服務(wù)壓力過大,比如京東雙促之類的服務(wù)降級方式比較多

簡單舉個列子:在各大電商大促銷的時候往往詳情頁有時候是不會看到推薦之類的信息。

熔斷與服務(wù)降級關(guān)系

  • 都是為實現(xiàn)服務(wù)高可用
  • 最終的表現(xiàn)方式類似 

基于Feign實現(xiàn)

  • Feign 本身支持Hystrix,不再需要引入相關(guān)的jar
  • Feign實現(xiàn)只支持類的方式,不支持方法
  • 如果啟用 Hytrix則設(shè)置 enabled = true
feign:
  hystrix:
    enabled: true

基于上次寫的FeignServer module來測試此功能

fallback

簡單的fallback應(yīng)用,在FeignClient中加入 fallback

@FeignClient(value = "ribbonserver" , fallback = FeignServerImpl.class )
public interface FeignServer {
    @RequestMapping(value ="/testRealRibbon",method= RequestMethod.GET)
    String testRealRibbon(@RequestParam("content") String content);
}

創(chuàng)建 FeignServerImpl 實現(xiàn)類,實現(xiàn)FeignClient的 FeignServer

@Component
public class FeignServerImpl implements FeignServer {
    public String testRealRibbon(@RequestParam("content") String content) {
        return content + ", it's fallback with feign";
    }
}

測試驗證

  • 啟動 discovery 、configserver、apigateway、feignserver
  • 因為feign調(diào)用的是ribbonserver的服務(wù),所以ribbonserver不用啟動

測試結(jié)果為: Hello World, it’s fallback with feign

啟動ribbonserver

測試結(jié)果為: Hello World, for Spring Boot

fallbackFactory

如果需要觸發(fā)來進行熔斷,則需要用 fallbackFactory

在FeignClient中加入 fallbackFactory

@FeignClient(value = "ribbonserver" , fallbackFactory = FeignServerFactoryImpl.class )
public interface FeignServer {
    @RequestMapping(value ="/testRealRibbon",method= RequestMethod.GET)
    String testRealRibbon(@RequestParam("content") String content);
}

創(chuàng)建 FeignServerFactoryImpl 實現(xiàn)類,實現(xiàn)FeignClient的 FeignServer

@Component
public class FeignServerFactoryImpl implements FallbackFactory<FeignServer> {
    /**
     * Returns an instance of the fallback appropriate for the given cause
     *
     * @param cause corresponds to {@link AbstractCommand#getFailedExecutionException()}
     *              often, but not always an instance of {@link FeignException}.
     */
    public FeignServer create(Throwable cause) {
        return new FeignServer() {
            public String testRealRibbon(String content) {
                return content + ", it's fallback Factory with feign";
            }
        };
    }
}

測試驗證

  • 啟動 discovery 、configserver、apigateway、feignserver
  • 因為feign調(diào)用的是ribbonserver的服務(wù),所以ribbonserver不用啟動

測試結(jié)果為: Hello World, it’s fallback Factory with feign

啟動ribbonserver

測試結(jié)果為: Hello World, for Spring Boot

基于Ribbon實現(xiàn)

  • 大致與Feign差不多,但需要引入 Hystrix,spring-cloud-starter-hystrix
  • Feign 因為本身支持 hystrix,所以不需要引入
  • @HystrixCommand 指定 fallback的方法
@Controller
public class RibbonController {
    @Autowired
    RestTemplate restTemplate;
    private final static String serverURI = "http://ribbonserver/";
    @RequestMapping("/test")
    @HystrixCommand(fallbackMethod = "testError")
    public String testRibbon(String content) {
        System.out.println(content);
        restTemplate.getForEntity(serverURI+"testRealRibbon?content="+content,String.class);
        return "index";
    }
    public String testError() {
        return "404";
    }
}

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

相關(guān)文章

  • SpringBoot整合WxJava開啟消息推送的實現(xiàn)

    SpringBoot整合WxJava開啟消息推送的實現(xiàn)

    本文主要介紹了SpringBoot整合WxJava開啟消息推送,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Jedis對redis的五大類型操作代碼詳解

    Jedis對redis的五大類型操作代碼詳解

    這篇文章主要介紹了Jedis對redis的五大操作代碼詳解,分別是字符串、列表、散列、集合、有序集合,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot批處理的實現(xiàn)示例

    SpringBoot批處理的實現(xiàn)示例

    SpringBatch是一個開源 的、全面的、輕量級的批處理框架,通過SpringBoot可以實現(xiàn)強大的批處理應(yīng)用程序開發(fā),本文主要介紹了SpringBoot批處理的實現(xiàn)示例,感興趣的可以了解一下
    2022-03-03
  • dom4j操作xml的demo(分享)

    dom4j操作xml的demo(分享)

    下面小編就為大家?guī)硪黄猟om4j操作xml的demo(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java連接Hbase的項目實踐

    Java連接Hbase的項目實踐

    HBase是基于Hadoop的高可靠、高性能、面向列的NoSQL數(shù)據(jù)庫,它提供了對海量數(shù)據(jù)的存儲和實時讀寫的能力,本文主要介紹了Java連接Hbase的項目實踐,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Spring SseEmitter推送消息及常用方法

    Spring SseEmitter推送消息及常用方法

    SseEmitter 是 Spring Framework 提供的用于支持 Server-Sent Events(SSE)的類,它允許服務(wù)器端向客戶端推送事件流,實現(xiàn)服務(wù)器到客戶端的單向通信,這篇文章主要介紹了Spring SseEmitter推送消息,需要的朋友可以參考下
    2024-07-07
  • spring boot實現(xiàn)驗證碼功能

    spring boot實現(xiàn)驗證碼功能

    Spring Boot是由Pivotal團隊提供的全新框架,其設(shè)計目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。這篇文章主要介紹了spring boot實現(xiàn)驗證碼功能,需要的朋友可以參考下
    2018-04-04
  • 一文帶你了解Spring的Bean初始化過程和生命周期

    一文帶你了解Spring的Bean初始化過程和生命周期

    Spring的核心功能有三點IOC、DI、AOP,IOC則是基礎(chǔ),也是Spring功能的最核心的點之一。今天一起來總結(jié)下Spring中Bean是怎么被創(chuàng)建出來的
    2023-03-03
  • Java設(shè)計模式之迭代模式(Iterator模式)介紹

    Java設(shè)計模式之迭代模式(Iterator模式)介紹

    這篇文章主要介紹了Java設(shè)計模式之迭代模式(Iterator模式)介紹,本文用一個老師點名的現(xiàn)象描述了迭代模式的使用,需要的朋友可以參考下
    2015-03-03
  • 詳解Java弱引用(WeakReference)的理解與使用

    詳解Java弱引用(WeakReference)的理解與使用

    這篇文章主要介紹了Java弱引用(WeakReference)的理解與使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論