乐趣区

关于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 办法
退出移动版