2021-01-20

Hystrix与Geteway简介
前言
一、服务降级
1.局部服务降级
2.全局服务降级
二、服务熔断
1.服务熔断的概述
2.熔断有哪几种状态
3.断路器的工作原理
4.如何开启熔断?
三、Hystrix DashBoard
1.创建仪表盘监控模块
2. 监控实战
四、Geteway网关
1.Geteway网关简介
2.Gateway 的核心概念
3.如何简单使用gateway(入门案例)
一、服务降级
  服务降级:服务器忙碌或者网络拥堵时,不让客户端等待并立刻返回一个友好提示,fallback(备选方案)。
  场景:调用服务超时,服务本身 内部错误,服务的线程资源耗尽

1.局部服务降级
1.1 在服务提供方设置
  在服务提供方进行局部服务设置,首先设置自身调用超时的峰值,峰值内正常运行,超出峰值需要有兜底的方法处理,作服务降级fallback调用。
(1)引入Hystrix依赖

org.springframework.cloud spring-cloud-starter-netflix-hystrix (2)在service中对超时方法进行设置,访问超时调用兜底方法   ( 降级方法(逻辑)编写的原则是方法的形参和返回值必须要和被降级的方法保持一致。)

/**
超时访问的方法,添加@HystrixCommand注解
*/
@HystrixCommand(fallbackMethod = “timeoutHandler”,commandProperties = {
//设置峰值,超过 3 秒,就会调用兜底方法,这个时间也可以由feign控制
@HystrixProperty(name = “execution.isolation.thread.timeoutInMilliseconds”,value = “3000”)
})
public String paymentInfo_Timeout(Integer id){
//设置超时调用时间
int interTime = 5;
//int i = 10/0;
try{
TimeUnit.SECONDS.sleep(interTime);
}catch (Exception e){
e.printStackTrace();
}
return “线程池:” + Thread.currentThread().getName() + " ,paymentInfo_Timeout,id:" + id + “耗时” + interTime + “秒钟”;
}
// 定义服务出现异常之后,兜底的方法
//降级方法(逻辑)编写的原则是方法的形参和返回值必须要和被降级的方法保持一致。
public String timeoutHandler(Integer id){
return “服务异常,请重试…”;
}
}
(3)在启动类上加上@EnableCircuitBreaker 作用:开启服务熔断
(4)运行测试结果
(5)同样在service的方法中设置一个异常(替换上一步的超时设置),用于模拟测试

public String paymentInfo_Timeout(Integer id){
//int interTime = 5;
//定义一个异常,用于测试
int i = 10/0;
}
(6)测试结果。
在发生服务不可用(调用超时或方法内部异常)时,都会进行降级调用来处理问题。
1.2 在消费方设置
(1)首先取消上述对于服务提供方的降级调用设置
(2)引入Hystrix依赖

org.springframework.cloud spring-cloud-starter-netflix-hystrix 3)在启动类上加上@EnableCircuitBreaker 作用:开启服务熔断 (4) 在controller层设置服务降级的逻辑编写,访问超时调用兜底方法
@HystrixCommand(fallbackMethod = "handeException", commandProperties = {
        //设置峰值,超过 1.5 秒,就会调用兜底方法
        @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds", value = "1500")
})
@GetMapping("/consumer/payment/hystrix/timeout/{id}")
public String paymentInfo_Timeout(@PathVariable("id")Integer id){
    log.info("paymentInfo_timeout");
    return orderService.paymentInfo_Timeout(id);
}
//定义兜底方法
public String handeException(Integer id){
    return "服务调用异常,请稍后再试.....";
}
(5)运行测试结果

(6)在服务提供方的service的方法中设置一个异常,返回一个值,用于测试结果

public String paymentInfo_Timeout(Integer id){
//设置超时调用时间
//int interTime = 5;
//定义异常
int i = 10/0;
/try{
TimeUnit.SECONDS.sleep(interTime);
}catch (Exception e){
e.printStackTrace();
}
return “线程池:” + Thread.currentThread().getName() + " ,paymentInfo_Timeout,id:" + id + “耗时” + interTime + “秒钟”;
/
return “发生内部异常”;
}
二、服务熔断
代码如下(示例):

1.服务熔断的概述
  当用户访问某个服务,达到了最大的访问量之后,直接拒绝用户访问。
  在SpringCloud框架中,熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况。当失败的调用到一定阈值时,缺省是5秒内20次调用失败,就会启动熔断机制。熔断机制的注解是@HystrixCommand。

2.熔断有哪几种状态
熔断状态机3个状态:
  (1)Closed:关闭状态,所有请求都正常访问。
  (2)Open:打开状态,所有请求都会被降级。Hystix会对请求情况计数,当一定时间内失败请求百分比达到阈值,则触发熔断,断路器会完全打开。默认失败比例的阈值是50%,请求次数最少不低于20次。
  (3)Half Open:半开状态,open状态不是永久的,打开后会进入休眠时间(默认是5S)。随后断路器会自动进入半开状态。此时会释放部分请求通过,若这些请求都是健康的,则会完全关闭断路器,否则继续保持打开,再次进行休眠计时。

3.断路器的工作原理
  统计用户在指定的时间范围(默认10s)之内的请求总数达到指定的数量之后,如果不健康的请求(超时、异常)占总请求数量的百分比(50%)达到了指定的阈值之后,就会触发熔断。触发熔断后,断路器就会打开(open),此时所有请求都不能通过。在5s之后,断路器会恢复到半开状态(half open),会允许少量请求通过,如果这些请求都是健康的,那么断路器会回到关闭状态(close).如果这些请求还是失败的请求,断路器还是恢复到打开的状态(open)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值