一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringCloud Hystrix的使用

SpringCloud Hystrix的使用

2021-09-08 10:27遇見_line Java教程

這篇文章主要介紹了SpringCloud Hystrix的使用,幫助大家更好的理解和學習使用SpringCloud,感興趣的朋友可以了解下

 

簡介

在分布式系統中,服務與服務之間依賴錯綜復雜,一種不可避免的情況就是某些服務將會出現失敗。Hystrix是一個庫,它提供了服務與服務之間的容錯功能,主要體現在延遲容錯和容錯,從而做到控制分布式系統中的聯動故障。Hystrix通過隔離服務的訪問點,阻止聯動故障,并提供故障的解決方案,從而提高了這個分布式系統的彈性。

面對的問題: 一個應用一般會依賴多個服務,每個服務由于網絡不可靠,機房的不可靠等等不穩定的因素,總會導致服務的故障,如果我們不對這些故障做處理,就會進而導致整個系統的不可用。

服務雪崩:

SpringCloud Hystrix的使用

SpringCloud Hystrix的使用

一個正常的用戶進入調用微服務A然后調用B在調用C然后離開,而當其中微服務C出現故障,導致用戶停留
B,越來越多的用戶進入,請求,停留B在最終導致B的資源被耗盡,不可用,進而A也慢慢不可用。這一系
列鏈式反應就像雪崩一樣影響越來越大,稱為"服務雪崩"

 

服務熔斷

參考:www.ythuaji.com.cn/article/190136.html

應對雪崩效應的一種微服務鏈路保護機制

當調用鏈路的某個微服務不可用或者響應時間太長時,會進行服務熔斷,不再有該節點微服務的調用,快速返回錯誤的響應信息。當檢測到該節點微服務調用響應正常后,恢復調用鏈路。

在Spring Cloud中通過Hystrix實現。Hystrix會監控微服務間調用的狀況,當失敗的調用到一定閾值,缺省是5秒內20次調用失敗,就會啟動熔斷機制。

服務熔斷解決如下問題:

  1. 當所依賴的對象不穩定時,能夠起到快速失敗的目的;
  2. 快速失敗后,能夠根據一定的算法動態試探所依賴對象是否恢復

 

實踐

項目搭建

根據 實驗環境搭建中的項目copy建立一個新模塊名為springcloud-provider-dept-hystrix。

導入依賴

?
1
2
3
4
5
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-hystrix</artifactId>
     <version>1.4.6.RELEASE</version>
</dependency>

使用

在Controller層,使用@HystrixCommand來實現熔斷

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface HystrixCommand {
    String groupKey() default "";
    String commandKey() default "";
    String threadPoolKey() default ""
    String fallbackMethod() default "";
    HystrixProperty[] commandProperties() default {};
    HystrixProperty[] threadPoolProperties() default {};
    Class<? extends Throwable>[] ignoreExceptions() default {};
    ObservableExecutionMode observableExecutionMode() default ObservableExecutionMode.EAGER;
    HystrixException[] raiseHystrixExceptions() default {};
    String defaultFallback() default "";
}

在@HystrixCommand中有 defaultFallback() 指定默認的備用方法(default ""), fallbackMethod() 指定失敗后進行的備用方法(default "")

當正常的方法調用失敗后(5秒內20次調用失敗),認為是出故障了就進行熔斷,快速返回錯誤信息(調用備選方法)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@RestController
public class DeptController {
    @Autowired
    private DeptImpl deptimpl;
    @RequestMapping("/dev/{id}")
    @HystrixCommand(fallbackMethod = "HystrixGet")//指明備用方法
    public Dept DeptqueryByID(@PathVariable("id") Long id) {
        Dept dept = deptimpl.queryByID(id);
        System.out.println(dept);
        if (dept==null) {
            throw new RuntimeException("id--->" + id + "用戶不存在");
        }
        return dept;
    }
    public Dept HystrixGet(@PathVariable("id") Long id) {
        Dept dept=new Dept();
        dept.setDeptnumber(id.intValue());
        dept.setDname("id"+id+"用戶不存在");
        dept.setD_source("no~~~~~~");
        return dept;
    }
 
}

在啟動類上添加@EnableCircuitBreaker開啟熔斷支持

?
1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker//開啟熔斷支持
public class HApplication {
    public static void main(String[] args) {
        SpringApplication.run(HApplication.class,args);
    }   
}

 

服務降級

即在服務器壓力劇增的情況下,關閉一些很少被調用的服務,騰出一些資源,保證正常運行。

如淘寶雙十一關閉退款通道。

 

實踐

在原本的FeignClient指明fallbackFactory

?
1
2
3
4
5
6
7
8
9
10
11
@FeignClient(value = "PROVIDER-NAME",fallbackFactory = SerciceFallbackFactory.class)
public interface DeptClientService {
    @RequestMapping(value = "/dev/add")
    boolean add(Dept dept);
 
    @RequestMapping(value = "/dev/{id}")
    Dept queryByID(@PathVariable("id") Long id );
 
    @PostMapping(value = "/dev/list")
    List<Dept> queryAll();
}

定義自己的FallbackFactory

報錯注意import feign.hystrix.FallbackFactory;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import feign.hystrix.FallbackFactory;
@Component
public class SerciceFallbackFactory implements FallbackFactory {
 
    public DeptClientService create(Throwable cause) {
        return new DeptClientService() {
            public boolean add(Dept dept) {
                return false;
            }
            //定義返回的錯誤信息
            public Dept queryByID(Long id) {
                Dept dept = new Dept();
                dept.setD_source("服務降級");
                dept.setDname("fail");
                dept.setDeptnumber(-1);
                return dept;
            }
 
            public List<Dept> queryAll() {
                return null;
            }
        };
    }
}

在客戶端的配置文件中添加

?
1
2
3
4
#開啟降級
feign:
  hystrix:
    enabled: true

結果:在我們關閉服務端后再次訪問服務時

SpringCloud Hystrix的使用

 

服務熔斷與服務降級的區別

  • 服務熔斷是在服務端進行的,而服務降級是在客戶端進行的
  • 服務熔斷的原因:發生故障,服務降級:為整體負荷考慮,保證核心業務的運行

 

服務監控 Dashboard

 

建立項目

導入依賴

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
 
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>

配置文件

?
1
2
3
4
5
6
7
server:
  port: 9001
hystrix:
  dashboard:
# Hystrix Dashboard會通過proxyUrl解析到host部分,然后通過配置的proxyStreamAllowList。判定是否允許被訪問
    proxy-stream-allow-list: "localhost"
   

開啟監控支持

?
1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableHystrixDashboard//開啟
@EnableDiscoveryClient
public class DashboardApplication {
    public static void main(String[] args) {
        SpringApplication.run(DashboardApplication.class,args);
    }
}

運行后訪問:http://localhost:9001/hystrix

SpringCloud Hystrix的使用

根據提示在spingcloud-provider-dept-hystrix服務端添加bean

?
1
2
3
4
5
6
@Bean
    public ServletRegistrationBean hystrixMetricsStreamServlet(){
        ServletRegistrationBean servlet = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
        servlet.addUrlMappings("/actuator/hystrix.stream");
        return servlet;
    }

運行后訪問 http://localhost:8081/actuator/hystrix.stream 可以獲得一些服務的信息

注意: 需要調用一次標注有 @HystrixCommand 方法才會有數據顯示,只會監控有 @HystrixCommand 的方法

SpringCloud Hystrix的使用

我們也可以通過在http://localhost:9001/hystrix 輸入

SpringCloud Hystrix的使用

按下按鈕開啟對該服務的監控

SpringCloud Hystrix的使用

SpringCloud Hystrix的使用

以上就是SpringCloud Hystrix的使用的詳細內容,更多關于SpringCloud Hystrix的資料請關注服務器之家其它相關文章!

原文鏈接:https://juejin.cn/post/6951311432801583112

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 国产一级免费片 | 丝瓜视频在线观看污 | 国产精品www夜色影视 | 日韩欧一级毛片在线播无遮挡 | 俄罗斯引擎首页进入 | 国产美女亚洲精品久久久久久 | 韩国三级在线观看 完整版 韩国三级视频网站 | 2020韩国三级理论在线观看 | chinese男同志同性twink | 九九精品免费视频 | 亚洲香蕉视频 | a一级毛片录像带 录像片 | 欧美同志video 在线观看 | 成人福利影院 | 欧美日韩在线一区 | 国产精品网站在线观看 | 91麻豆精品国产91久久久 | 天堂欧美 | 午夜影院免费观看视频 | 精品一区二区三区在线播放 | 高清黄色直接看 | 美女机机对机机的视频(免费) | 爽好舒服宝贝添奶吻戏 | 亚洲国产精品一区二区三区久久 | 无码国产成人午夜在线观看不卡 | 特黄特黄一级高清免费大片 | 国产精品免费精品自在线观看 | 无遮挡免费h肉动漫在线观看 | 青草午夜精品视频在线观看 | 国产一区视频在线免费观看 | 高清毛片一区二区三区 | 亚洲成年 | 女主被当众调教虐np | 亚洲精品成人456在线播放 | 青草国产福利视频免费观看 | 亚洲成人贴图 | 久久精品WWW人人爽人人 | 秋霞理论最新三级理论最 | 国产成人精品免费午夜 | 91东航翘臀女神在线播放 | 免费国产影视观看网站入口 |