Hystrix

微信扫一扫,分享到朋友圈

Hystrix

Hystrix断路器

  • 系统容错
  • 限流

启动断路器,断路器提供两个核心功能:

  • 降级
    ,超时、出错、不可到达时,对服务降级,返回错误信息或者是缓存数据
  • 熔断
    ,当服务压力过大,错误比例过多时,熔断所有请求,所有请求直接降级

降级

调用远程服务失败(异常,服务不存在,超时),可以执行当前服务的一段代码,向客户端响应

  • 返回错误提示
  • 返回缓存数据

实现降级

1.添加 hystrx 依赖

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

2.添加注解 @EnableCircuitBreaker

3.远程调用代码上,添加 @HystrixCommand(fallbackMethod=”降级方法名”)

4.完成降级方法

//降级方法的参数和返回值,需要和原始方法一致,方法名任意
public JsonResult<List<Item>> getItemsFB(String orderId) {
return JsonResult.err("获取订单商品列表失败");
}
public JsonResult decreaseNumberFB(List<Item> items) {
return JsonResult.err("更新商品库存失败");
}
public JsonResult<User> getUserFB(Integer userId) {
return JsonResult.err("获取用户信息失败");
}
public JsonResult addScoreFB(Integer userId, Integer score) {
return JsonResult.err("增加用户积分失败");
}
public JsonResult<Order> getOrderFB(String orderId) {
return JsonResult.err("获取订单失败");
}
public JsonResult addOrderFB() {
return JsonResult.err("添加订单失败");
}

熔断

特殊情况,在特定条件下触发

  1. 10秒内20次请求
    (必须首先满足)
  2. 50%失败,执行降级代码

熔断时,不会向后台服务调用,而是直接执行当前服务的降级代码返回结果

断路器打开几秒后,会进入“半开状态”,会尝试向后台服务发送调用,如果失败继续保持打开状态;如果成功断路器自动关闭,恢复正常

Hystrix 超时

启用 Hystrix 后,它有默认的超时时间:1秒

如果 hystrix 和 ribbon 重试一起使用,超时时间应该设置成大于等于 ribbon 总的超时时间

Hystrix Dashboard

Hystrix监控仪表盘

Actuator

Springboot 提供的项目监控工具,可以对外暴露项目的多种监控信息

  • 健康状态
  • Spring容器中所有的对象
  • SpringMVC设置的所有映射路径
  • 系统环境变量

Hystrix利用 Actuator 工具,暴露了自己的监控数据

添加 Actuator

  1. 添加 actuator 依赖
  2. 暴露监控端点

    m.e.w.e.i=”*” #暴露所有监控端点

    m.e.w.e.i=[health, env, beans] #暴露指定的多个端点

    m.e.w.e.i=hystrix.stream #只暴露一个端点

搭建仪表盘项目

Hystrix Dashboard 是一个完全独立的项目

  1. 添加 Hystrix Dashboard 依赖
  2. 添加注解 @EnableHystrixDashboard
@EnableDiscoveryClient
@EnableHystrixDashboard
@SpringBootApplication
public class Sp08HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(Sp08HystrixDashboardApplication.class, args);
}
}

使用 apache 的并发访问测试工具 ab

  • 用 ab 工具,以并发50次,来发送20000个请求
ab -n 20000 -c 50 http://localhost:3001/item-service/35`
  • 断路器状态为 Open,所有请求会被短路,直接降级执行 fallback 方法

微信扫一扫,分享到朋友圈

Hystrix

美国宇航局“阿尔忒弥斯”月球任务水下训练正在进行中

上一篇

成都链安郑重声明:从未对WATERBRIDGE进行安全审计!

下一篇

你也可能喜欢

Hystrix

长按储存图像,分享给朋友