我是靠谱客的博主 温柔河马,最近开发中收集的这篇文章主要介绍尚硅谷SpringCloud2020简单学习记录(个人用)58-64集,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

服务降级→进而熔断→恢复调用链路(勉强能认为是降级的一种,但比降级要严重)

熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路。

开放,半开,关闭三种状态。

cloud-provider-hystrix-payment8001进行改造

首先是service,添加一下内容:

@HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback",commandProperties = {
@HystrixProperty(name="circuitBreaker.enabled",value="true"),//是否开启断路器
@HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value="10"),//请求次数      @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value="10000"),//时间范围  @HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value="60"),//失败率达到多少后跳闸
})
public String paymentCircuitBreaker(@PathVariable("id") Integer id){
   
if(id<0){
       
throw new RuntimeException(("*********id 不能负数"));
    }
   
String serialNumber = IdUtil.simpleUUID();
   
return Thread.currentThread().getName()+"t"+"调用成功,流水号为"+serialNumber;
}


public String paymentCircuitBreaker_fallback(@PathVariable("id") Integer id){
   
return "id不能为负数,请稍后再试"+id;
}

Controller添加以下内容:

//服务熔断
@GetMapping("/payment/circuit/{id}")
public String paymentCircuitBreaker(@PathVariable("id") Integer id){
   
String result = paymentService.paymentCircuitBreaker(id);
   
return result;
}

输入http://localhost:8001/payment/circuit/1 显示正常:

hystrix-PaymentService-1 调用成功,流水号为d98451c4661c49d89b5b75701ae225d9

http://localhost:8001/payment/circuit/-2,调用降级方法:

id不能为负数,请稍后再试-2

疯狂刷新http://localhost:8001/payment/circuit/-2,再调用

http://localhost:8001/payment/circuit/1,会显示成

id不能为负数,请稍后再试1,过段时间才会显示成

hystrix-PaymentService-1 调用成功,流水号为cd336b2d44814bc79fa840c55e19e335

这是一个慢慢恢复的过程

总结:

熔断打开:在固定时间内(Hystrix默认是10秒),接口调用出错比率达到一个阈值(Hystrix默认为50%),会进入熔断开启状态。进入熔断状态后,后续对该服务接口的调用不再经过网络,直接执行本地的fallback方法。

熔断关闭:服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制。

半熔断状态:在进入熔断开启状态一段时间之后(Hystrix默认是5秒),熔断器会进入半熔断状态。部分请求根据规则调用当前服务,如果请求成功且符合规则则认为当前服务恢复正常,关闭熔断

涉及到断路器的三个重要参数:

1circuitBreaker.sleepWindowInMilliseconds

断路器的快照时间窗,也叫做窗口期。可以理解为一个触发断路器的周期时间值,默认为10秒(10000)。

2circuitBreaker.requestVolumeThreshold

断路器的窗口期内触发断路的请求阈值,默认为20。换句话说,假如某个窗口期内的请求总数都不到该配置值,那么断路器连发生的资格都没有。断路器在该窗口期内将不会被打开。

3circuitBreaker.errorThresholdPercentage

断路器的窗口期内能够容忍的错误百分比阈值,默认为50(也就是说默认容忍50%的错误率)。打个比方,假如一个窗口期内,发生了100次服务请求,其中50次出现了错误。在这样的情况下,断路器将会被打开。在该窗口期结束之前,即使第51次请求没有发生异常,也将被执行fallback逻辑。

服务限流(等高级篇讲解alibabasentinel再说)

工作流程可以去github上看:

How it Works · Netflix/Hystrix Wiki · GitHub

The following sections will explain this flow in greater detail:

1 Construct a HystrixCommand or HystrixObservableCommand Object

2 Execute the Command

3 Is the Response Cached?

4 Is the Circuit Open?

5 Is the Thread Pool/Queue/Semaphore Full?

6 HystrixObservableCommand.construct() or HystrixCommand.run()

7 Calculate Circuit Health

8 Get the Fallback

9 Return the Successful Response

How To Use · Netflix/Hystrix Wiki · GitHub

工作流程图:

熔断和降级的区别(摘自网络)

故事的背景是这样的:由于小强在工作中碰到一些问题,于是想请教一下业界大牛小壮。于是发生了下面的两个场景:

小强在拿起常用手机拨号时发现该手机没有能够拨通,所以就拿出了备用手机拨通了某A的电话,这个过程就叫做降级(主逻辑失败采用备用逻辑的过程)。

由于每次小壮的解释都属于长篇大论,不太容易理解,所以小强每次找小壮沟通的时候都希望通过常用手机来完成,因为该手机有录音功能,这样自己可以慢慢消化。由于上一次的沟通是用备用电话完成的,小强又碰到了一些问题,于是他又尝试用常用电话拨打,这一次又没有能够拨通,所以他不得不又拿出备用手机给某A拨号,就这样连续的经过了几次在拨号设备选择上的降级,小强觉得短期内常用手机可能因为运营商问题无法正常拨通了,所以,再之后一段时间的交流中,小强就不再尝试用常用手机进行拨号,而是直接用备用手机进行拨号,这样的策略就是熔断(常用手机因短期内多次失败,而被暂时性的忽略,不再尝试使用)。

Hystrix图形化Dashboard构建

以报表和仪表盘形式呈现

构建模块cloud-consumer-hystrix-dashboard9001

Pom相比之前加入以下内容:

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>

</dependency>

主启动类:

@SpringBootApplication

@EnableHystrixDashboard

public class HystrixDashboardMain9001 {

    public static void main(String[] args) {

        SpringApplication.run(HystrixDashboardMain9001.class,args);

    }

}

要想图形化监控,务必记得加入

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

启动项目,输入:

http://localhost:9001/hystrix 图形化页面出现后即代表成功

接着为了实现监控,修改8001

在主启动类加入:

//必须配,不然会报错

@Bean

public ServletRegistrationBean getServlet(){

    HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();

    ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);

    registrationBean.setLoadOnStartup(1);

    registrationBean.addUrlMappings("/hystrix.stream");

    registrationBean.setName("HystrixMetricsStreamServlet");

    return registrationBean;

}

启动项目,在图形化页面内输入:http://localhost:8001/hystrix.stream

Delay2000titleT3

点击monitor即可开启监控

以上为58-64集的内容

最后

以上就是温柔河马为你收集整理的尚硅谷SpringCloud2020简单学习记录(个人用)58-64集的全部内容,希望文章能够帮你解决尚硅谷SpringCloud2020简单学习记录(个人用)58-64集所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部