中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud中如何使用Hystrix熔斷器

發布時間:2021-07-30 11:54:29 來源:億速云 閱讀:148 作者:Leah 欄目:大數據

本篇文章為大家展示了SpringCloud中如何使用Hystrix熔斷器,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

一、簡介

什么是Hystrix
  1. 單詞本身意思就是斷路器,發音 [h?st'r?ks] ,怎么讀聽這里 https://www.koolearn.com/dict/wd_73657.html

  2. Hystrix是NetFlix公司開源的項目,提供了熔斷器的功能,能夠阻止分布式系統中出現的聯動故障。

  3. Hystrix通過隔離服務的訪問點阻止聯動故障,并且提供故障解決方案,提高了分布式系統的彈性和容錯。

Hystrix所解決的問題
  1. 防止服務故障導致資源耗盡。

    通過熔斷機制,可以防止單個服務故障導致影響整個Servlet容器的線程資源。

  2. 避免過長等待。

    快速失敗機制,如果某個服務故障,則接下來該服務不會處理請求,快速的返回失敗。

  3. 增加服務彈性。

    • 提供了回退方案,請求發生故障時,可以調用fallback處理。

    • 提供熔斷機制,防止故障傳播到其他服務。

    • 熔斷后不斷嘗試,特定條件下可以自動修復服務。

  4. 提供監控。

    提供熔斷器的監控組件 Hystrix Dashboard,可以實時監控斷路器的狀態。

二、簡單使用

無論是Ribbon使用還是Feign使用,都需要前面兩步

  1. pom.xml中增加依賴

<!-- hystrix熔斷器依賴 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
  1. 啟動類增加注解表示開啟熔斷器功能

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
public class ServerApplication {

    private static final Logger logger = LoggerFactory.getLogger(ServerApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(ServerApplication.class,args);
        logger.info("hystrix server start up finished !");
    }

}
Ribbon搭配使用
@Autowired
private RestTemplate restTemplate;

/**
 * 每個需要熔斷的遠程方法上,增加注解,定義回調
 * @HystrixCommand定義服務降級,這里的fallbackMethod服務調用失敗后調用的方法。
 * @return
 */
@HystrixCommand(fallbackMethod = "hiError")
public String getHi(){
    return restTemplate.getForObject("http://hystrix-service/hi", String.class);
}

/**
 * fallbackMethod指向此方法,表示遠程調用失敗后,快速的使用此方法替代
 */
public String hiError(){
    return "error";
}
Fiegn搭配使用
  1. 在遠程服務的FeignClient的注解上增加回調,定義回調類

@FeignClient(value = "common-service", 
             configuration = FeignConfiguration.class, 
             fallback = RemoteCommonServiceCallback.class)
public interface RemoteCommonServiceClient {
    /**
     * 調用遠程方法
     * @return
     */
    @GetMapping(value = "/hello")
    String remoteCommonServiceHello();

}
  1. 實現FeignClient中定義的回調類

/**
 * <p>
 *   @Component注冊為一個組件,實現RemoteCommonServiceClient,重寫方法定義回調
 * <p>
 * @author Calvin
 * @date 2019/10/24
 * @since 1.0
 */
@Component
public class RemoteCommonServiceCallback implements RemoteCommonServiceClient {

    @Override
    public String remoteCommonServiceHello() {
        return "something error, this is callback";
    }
}
  1. application.yml中開啟Feign對Hystrix的支持

feign:
  hystrix:
    enabled: true

具體測試,可以通過停掉需要被調用的遠程服務來測試,或者自己制造一些,服務在某段時間不可用,使線程睡眠等操作

三、監控

Hystrix Dashboard
  1. 增加依賴

<!-- Springboot監控 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Hystrix Dashboard -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
  1. 啟動類增加注解開啟dashboard

/**
 * <p>
 *     啟動類,集合了服務注冊、FeignClient聲明式調用、開啟熔斷器、開啟熔斷器監控
 * </p>
 *
 * @author Calvin
 * @date 2019/10/24
 * @since 1.0
 */
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
@EnableHystrixDashboard
public class HystrixServerApplication {

    private static final Logger logger = LoggerFactory.getLogger(HystrixServerApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(HystrixServerApplication.class,args);
        logger.info("hystrix server start up finished !");
    }

}
  1. 監控頁面觀察

  • step1:瀏覽器輸入http://localhost:8080/hystrix SpringCloud中如何使用Hystrix熔斷器

  • step2:頁面填入 http://localhost:8080/hystrix.stream Dalay和Title自己填 SpringCloud中如何使用Hystrix熔斷器

  • step3: 沒有step3,以下是踩過的坑

    1. 地址欄輸入的和頁面填進去的東西一定不是同一個,輸錯了只能看到一直在ping,就像這樣
      SpringCloud中如何使用Hystrix熔斷器

    2. 剛進去的時候是loading狀態的時候表著急,就像下圖,你只需要調用一下遠程服務
      SpringCloud中如何使用Hystrix熔斷器

    3. 指標意義
      SpringCloud中如何使用Hystrix熔斷器
      注:此圖來源 https://blog.csdn.net/wm6752062/article/details/86136204 侵刪

Turbine聚合監控
  1. 新建服務turbine-monitor

  2. pom.xml

<parent>
    <artifactId>hystrix-test</artifactId>
    <groupId>com.calvin.hystrix</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>turbine-monitor</artifactId>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-turbine</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  1. TurbineMonitorApplication

/**
 * <p>
 *     啟動類
 * </p>
 *
 * @author Calvin
 * @date 2019/10/24
 * @since
 */

@SpringBootApplication
@EnableTurbine
@EnableHystrix
@EnableHystrixDashboard
public class MonitorApplication {

    public static void main(String[] args) {
        SpringApplication.run(MonitorApplication.class,args);
    }

}
  1. application.yml

spring:
  application:
    name: turbine-monitor
server:
  port: 8040
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8010/eureka/
turbine:
# 需要監控的服務名
  app-config: common-service, hystrix-service
# 服務名的集群
  cluster-name-expression: new String("default")
  1. 啟動服務

  • 瀏覽器:http://localhost:8040/hystrix
    SpringCloud中如何使用Hystrix熔斷器



  • 調用遠程服務
    SpringCloud中如何使用Hystrix熔斷器

上述內容就是SpringCloud中如何使用Hystrix熔斷器,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

威信县| 郸城县| 永吉县| 淳化县| 渭源县| 阿拉善盟| 东阳市| 顺昌县| 铜鼓县| 寿宁县| 柏乡县| 疏附县| 思南县| 甘南县| 宁强县| 牡丹江市| 渭南市| 怀宁县| 永寿县| 张家港市| 张北县| 信宜市| 金昌市| 黎川县| 洞口县| 宜宾县| 耿马| 汉沽区| 鸡东县| 抚远县| 中阳县| 农安县| 垦利县| 江西省| 广灵县| 金坛市| 鹿泉市| 成都市| 淅川县| 扬州市| 五家渠市|