spring cloud微服務快速教程之(四)熔斷器(Hystrix)及其工具(Dashboard、Turbine)

来源:https://www.cnblogs.com/yanghj/archive/2020/01/07/12162112.html
-Advertisement-
Play Games

0-為什麼需要熔斷器 在分散式系統中,各個服務相互調用相互依賴,如果某個服務掛了,很可能導致其他調用它的一連串服務也掛掉或者在不斷等待中耗盡伺服器資源,這種現象稱之為雪崩效應; 未來防止系統雪崩,熔斷機制必不可少,就是當一個服務掛掉後,調用它的服務能快速熔斷,不再耗費資源,快速失敗並提供回退方案; ...


0-為什麼需要熔斷器

  在分散式系統中,各個服務相互調用相互依賴,如果某個服務掛了,很可能導致其他調用它的一連串服務也掛掉或者在不斷等待中耗盡伺服器資源,這種現象稱之為雪崩效應

  未來防止系統雪崩,熔斷機制必不可少,就是當一個服務掛掉後,調用它的服務能快速熔斷,不再耗費資源,快速失敗並提供回退方案;

   Hystrix】:是spring cloud的熔斷器組件,提供了熔斷器功能,能夠阻止聯動故障,並提供故障的解決方案,提供系統彈性;

  【Hystrix Dashboard】:是熔斷器的監控面板,通過它,能直觀的瞭解熔斷器的狀況;

  【Turbine】: 在Dashboard中,我們要輸入一個一個單獨的服務地址進行監控和瞭解;那麼多服務,一個一個輸入那不是累死人,有沒有一個工具能把眾多分散的微服務熔斷器監控狀況聚合到一起,使得我們在一個Dashboard就能瞭解眾多服務的熔斷器監控狀況呢,有,這個工具就是Turbine;它的作用就是聚合眾多微服務的hystrix監控數據到一起,使得我們只需要在一個Dashboard就能瞭解所有;

一、使用hystrix

1.1、添加依賴

 

<!-- 斷路器 hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

1.2、配置文件中開啟熔斷器開關

#開啟熔斷器開關
feign:
  hystrix:
    enabled: true

1.3、啟動類中增加 @EnableHystrix 註解和bean

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
@EnableFeignClients
public class application
{
    public  static void main(String[] args)
    {
        SpringApplication.run(application.class);
@Bean
public ServletRegistrationBean getServlet(){
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/actuator/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
 
} }

1.4、增加熔斷器類,實現Feign的介面

package com.anson.service.feign;

import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @description: 熔斷器類
 * @author: anson
 * @Date: 2020/1/7 11:24
 */
@Component
public class FUserServiceHystrix implements FUserService
{
    @RequestMapping("/user/hello")
    @Override
    public  String hello()
    {
        return "對不起,user服務不可達,請稍後再試!";
    }
}

1.5、增加熔斷器配置類FeignConfig

package com.anson.config;

import feign.Retryer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;
@Configuration
public class FeignConfig {
    @Bean
    public Retryer feignRetryer() {
        /*
         * 參數說明:
         * 第一個> 重試間隔為100毫秒
         * 第二個> 最大重試時間為1秒
         * 第三個> 最大重試次數為5次
         */
        return new Retryer.Default(100, TimeUnit.SECONDS.toMillis(1), 5);
    }
}

 

1.6、在Feign介面註解中增加fallback,指向熔斷器類

package com.anson.service.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient(name = "user",configuration = FeignConfig.class,fallback = FUserServiceHystrix.class)
public interface FUserService
{
@RequestMapping("/user/hello")
public String hello();
}

1.7、運行測試

user服務正常時:

 

 

 user服務關閉時:

 

 

 ---------------------------華麗麗的分割線-------------------------------------------------------

二、Hystrix Dashboard的使用

2.1、熔斷器加了,那麼我們要監控和查看hystrix的運行狀態,這時候Dashboard上場;

2.2、添加依賴:

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

2.3、啟動類添加註解 @EnableHystrixDashboard

2.4、完成,運行測試,打開,http://localhost:8767/hystrix

在裡面填入要監控的微服務地址  +/actuator/histrix.stream,如:http://localhost:8768/actuator/histrix.stream,title也填入,點擊按鈕就可以看到結果了:如圖

 

 

 

 可以看到我們加入的熔斷器的運行狀態

----------------------------------------------華麗麗的分割線-----------------------------------------------------------------

三、Turbine 聚合監控數據

3.1、上面Dashboard中,我們輸入http://localhost:8767/actuator/histrix.stream,它只是現實埠8767這個微服務實例的監控數據而已,要看其他的,還得重新輸入,那能不能有個工具將所有微服務的監控數據都聚合到一起,顯示到Dashboard中呢,這個工具就是Turbine 

3.2、新建一個模塊,添加相關依賴:

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

3,.3、修改配置文件,其中app-config是要監控的服務名,多個用逗號分隔;

server:
  port: 8768

spring:
  application:
    name: turbine

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true

turbine:
  combine-host-port: true
  app-config: order
  cluster-name-expression: new String("default")
  instanceUrlSuffix: actuator/hystrix.stream
  aggregator:
    cluster-config: default

 

3.4、在啟動類中添加註解@EnableTurbine;

package com.anson;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.netflix.turbine.EnableTurbine;

/**
 * @description: TODO
 * @author: anson
 * @Date: 2020/1/6 14:27
 */
@SpringBootApplication
@EnableEurekaClient
@EnableTurbine
@EnableHystrixDashboard
public class application
{
    public  static void main(String[] args)
    {
        SpringApplication.run(application.class);
    }

}

完成,啟動運行後,他就會將所有配置文件中添加進來的服務全部的熔斷器監控數據聚合到一起了,

在任意項目的Dashboard面板中填入http://turbine-hostname:port/turbine.stream 的地址樣式,就能看到所有的監控數據了 

,如 : http://localhost:8768/turbine.stream

 

 我們只加了一個熔斷器,你可以多加幾個看看效果;

好了,熔斷器hystrix簡單講解到著,,更深入的後續再詳聊,GIT源碼後續再放出

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 響應式佈局的原理xsmall <576pxsmall >=576pxmedium >=768pxlarge >=992pxxlarge >=1200px 接下來是效果圖 中屏及以上效果 移動端效果 方案一:使用柵格系統開發響應式頁面 index.html <!DOCTYPE html> <html ...
  • 實際開發中的像素:css像素設備像素比dpr=設備像素/css像素標清屏dpr=1 高清屏dpr=2縮放改變的是css像素大小PPI(每英寸的物理像素點)=根號(屏幕橫向解析度²+屏幕縱向解析度²)/屏幕對角線長度(單位英寸) 視口viewport <meta name="viewport" con ...
  • ©Copyright 蕃薯耀 2020-01-07 https://www.cnblogs.com/fanshuyao/ 一、問題描述: 使用jquery easyui combogrid時,當查詢列表沒有結果action返回 時,會報錯,錯誤如下: 二、解決方案: 當查詢結果為空時,預設返回: 這 ...
  • 年底了,最近公司也不是太忙,感覺今年互聯網行業都遇到寒冬,不在是前兩年像熱的發燙的賽道。這幾天完成公司項目系統的優化和升級,目前準備想開發一套前後端分離的系統。 現在java最新最火的技術要數springboot了,部門系統的架構一直是我在開發,當然中間也踩過一些坑其實都是一些很簡單的問題,隨之技術 ...
  • ©Copyright 蕃薯耀 2020-01-07 https://www.cnblogs.com/fanshuyao/ (如果你覺得文章對你有幫助,歡迎捐贈,^_^,謝謝!) ©Copyright 蕃薯耀 2020-01-07 https://www.cnblogs.com/fanshuyao/ ...
  • 先放圖 demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, use ...
  • 通過 HTML DOM,您能夠使用節點關係來導航節點樹。 DOM 節點 根據 W3C HTML DOM 標準,HTML 文檔中的所有事物都是節點: 整個文檔是文檔節點 每個 HTML 元素是元素節點 HTML 元素內的文本是文本節點 每個 HTML 屬性是屬性節點 所有註釋是註釋節 有了 HTML ...
  • 0-前言 我們一個個微服務構建好了,外部的應用如何來訪問內部各種各樣的微服務呢?在微服務架構中,後端服務往往不直接開放給調用端,而是通過一個API網關根據請求的url,路由到相應的服務。當添加API網關後,在第三方調用端和服務提供方之間就創建了一個代理層,這個代理層直接與調用方通信進行許可權控制,後將 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...