1. 程式人生 > >SpringBoot -- 熔斷機制 Circuit Breaker

SpringBoot -- 熔斷機制 Circuit Breaker

Circuit Breaker


  • 熔斷機制在微服務中必不可少,比如故障發生時怎麼處理
  • 熔斷:半熔斷、熔斷開啟、熔斷關閉
  • 熔斷關閉: 熔斷關閉不會對服務進行熔斷,當請求服務失敗次數符合設定的規則則進入熔斷機制
  • 半熔斷: 部分請求根據規則呼叫當前服務,如果請求成功且符合規則則認為當前服務恢復正常,關閉熔斷;
  • 熔斷開啟:請求不再進行呼叫當前服務,內部設定時鐘一般為(MTTR:平均故障處理時間),當開啟時長達到所設時鐘則進入半熔斷狀態。
  • 基於服務策略觸發

服務降級


  • 提到熔斷機制還得提下服務降級
  • 服務降級往往因為服務壓力過大,比如京東雙促之類的
  • 服務降級方式比較多,簡單舉個列子:在各大電商大促銷的時候往往詳情頁有時候是不會看到推薦之類的資訊。
  • 熔斷與服務降級關係
  • 都是為實現服務高可用
  • 最終的表現方式類似
  • ……

基於Feign實現

  • Feign 本身支援Hystrix,不再需要引入相關的jar
  • Feign實現只支援類的方式,不支援方法
  • 如果啟用 Hytrix則設定 enabled = true
feign:
  hystrix:
    enabled: true

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

fallback

簡單的fallback應用,在FeignClient中加入 fallback

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

建立 FeignServerImpl 實現類,實現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呼叫的是ribbonserver的服務,所以ribbonserver不用啟動

測試結果為: Hello World, it’s fallback with feign

  • 啟動ribbonserver

測試結果為: Hello World, for Spring Boot

fallbackFactory

如果需要觸發來進行熔斷,則需要用 fallbackFactory

在FeignClient中加入 fallbackFactory

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

}

建立 FeignServerFactoryImpl 實現類,實現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呼叫的是ribbonserver的服務,所以ribbonserver不用啟動

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

  • 啟動ribbonserver

測試結果為: Hello World, for Spring Boot

基於Ribbon實現

  • 大致與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";
    }
}

程式碼

如有疑問請加公眾號(K171),如果覺得對您有幫助請 github start
公眾號_k171

相關推薦

SpringBoot -- 熔斷機制 Circuit Breaker

Circuit Breaker 熔斷機制在微服務中必不可少,比如故障發生時怎麼處理 熔斷:半熔斷、熔斷開啟、熔斷關閉 熔斷關閉: 熔斷關閉不會對服務進行熔斷,當請求服務失敗次數符合設定的規則則進入熔斷機制

Building Microservices with Spring Cloud - Fault tolerance Circuit breaker

tps blog logs single pri ros ces nts bre ref: https://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#_circuit_bre

SpringCloud系列七:Hystrix 熔斷機制(Hystrix基本配置、服務降級、HystrixDashboard服務監控、Turbine聚合監控)

bsp 但是 mem style 查詢 packages discover seconds ID 1、概念:Hystrix 熔斷機制 2、具體內容 所謂的熔斷機制和日常生活中見到電路保險絲是非常相似的,當出現了問題之後,保險絲會自動燒斷,以保護我們的電器, 那麽如果換到了程

談談Circuit Breaker在.NET Core中的簡單應用

訂單號 exe 什麽 login isolation HA 使用 doc his 前言 由於微服務的盛行,不少公司都將原來細粒度比較大的服務拆分成多個小的服務,讓每個小服務做好自己的事即可。 經過拆分之後,就避免不了服務之間的相互調用問題!如果調用沒有處理好,就有可能造成整

.NET Core中Circuit Breaker

face The please res 一段時間 故障 cte dds 理想 談談Circuit Breaker在.NET Core中的簡單應用 前言 由於微服務的盛行,不少公司都將原來細粒度比較大的服務拆分成多個小的服務,讓每個小服務做好自己的事即可。 經過拆分之後,就避

Hystrix 熔斷機制原理

volume this 請求 rip web 沒有 command ets wait 相關配置 circuitBreaker.enabled 是否開啟熔斷 circuitBreaker.requestVolumeThreshold 熔斷最低觸發請求數閾值 circuit

Circuit Breaker

roc ppr cati range opera things taf regular arr CircuitBreaker 轉載自 https://martinfowler.com/bliki/CircuitBreaker.html Martin Fowler I

Steeltoe之Circuit Breaker

page val collect mman seve vat ken tar localhost 在分布式系統中,服務發生異常是很正常的現象。為了處理這類“例外”,可以采取不同的應對策略,斷路器模式即是其中一種方法。這個模式的主要特點是其可以阻斷失敗的級聯影響,不會因為一個

Akka之Circuit Breaker

 這周在專案中遇到了一個錯誤,就是Circuit Breaker time out。以前沒有接觸過,因此學習了下akka的斷路器。 一、為什麼使用Circuit Breaker 斷路器是為了防止分散式系統中的級聯故障,從而保障其穩定性。其應該與遠端系統之間介面的明智超時結合使

架構必經之路2 - 熔斷機制 架構之旅1 - 扣減庫存

架構之旅1 - 扣減庫存 架構之旅2 - 熔斷機制   專案中要做一個熔斷機制,預防對第三方的介面呼叫壓力太大。下面我介紹下專案中用到的熔斷機制。 一、熔斷機制   1.熔斷檢測機制 (1)請求call到backend後,首先判

Spring Cloud學習筆記24——天氣預報系統微服務實現熔斷機制

建立專案 以之前的msa-weather-report-eureka-feign-gateway為藍本,建立msa-weather-report-eureka-feign-gateway-hystrix專案 修改build.gradle配置,新增Hystrix依賴: //依賴關係

SpringCloud 基礎教程(五) 服務熔斷機制(Eureka + Ribbon + Hystrix)

1、啟動【服務中心】叢集,即 Eureka Server 參考 SpringCloud 基礎教程(一) 服務中心及叢集(Eureka Server) 2、啟動【服務提供者】叢集,即 Eureka Client 參考 SpringCloud 基礎教程(二) 服務註冊及叢集(Eureka C

利用Spring Cloud實現微服務(八)- 熔斷機制

1. 熔斷機制介紹 在介紹熔斷機制之前,我們需要了解微服務的雪崩效應。在微服務架構中,微服務是完成一個單一的業務功能,這樣做的好處是可以做到解耦,每個微服務可以獨立演進。但是,一個應用可能會有多個微服務組成,微服務之間的資料互動通過遠端過程呼叫完成。這就帶來一個問題,假設微服務A呼叫微服務

SpringCloud -- Hystrix 熔斷機制實現(基於 Ribbon、Feign)

一、基於 Ribbon + Hystrix   在入口類 中 加上@EnableHystrix   //表示載入熔斷器功能 package com.springcloud.ribbon; import org.springframework.boot.SpringA

springboot學習小筆記(二)---springboot工作機制

Spring Boot工作機制簡介 一、@SpringBootApplication 我們新建一個springboot專案裡面會有一個SpringbootDay1203Application類 我們都知道@SpringBootApplication是Springboot專案的核心註

SpringCloud Zuul實現負載均衡和熔斷機制

一、場景 筆者就Zuul閘道器下實現其負載均衡與熔斷機制(雪崩)進行實踐,前提是已經匯入zuul相關依賴 springboot版本:1.5.9.RELEASE springcloud版本:Dalston.SR5 <dependencies> <d

【Spring Cloud】第二篇 Circuit Breaker | 斷路器

服務意外跪掉後的處理方式,不至於所有的功能失效。 官方網站的這個圖很形象,當服務跪掉後有一個fallback返回。 word & phrase Circuit Breaker 中斷迴

Circuit Breaker pattern

In the previous post, i have implemented simple circuit-breaker pattern with Java, and today i will do it with Go Talk about advanced of Go + Golang ha

SpringBoot任務機制(非同步,定時,郵件)

SpringBoot任務機制(非同步,定時,郵件)   SpringBoot任務機制 ​​​1 非同步任務​ ​ ​ ​ ​ ​ ​ 2 定時任務​ ​ ​​ ​ ​ 3

晶片程式燒錄的熔斷機制與安全

熔絲位是在一個特定的地址上可以讀到熔絲狀態的一個位。0表示已熔斷,1表示未熔斷。微控制器MCU或者CPU等晶片在特定的引腳外加高電平後,可以通過產生的電流燒斷裡邊的熔絲,進而使晶片裡的程式變得不可讀寫只能執行,這就是熔斷功能起到的效果。早先很多微控制器或者安全加密晶片具備熔絲功能。當產品除錯定版後,在量產時都