Hystrix入门教程

一·什么是Hystrix?Hystrix有什么作用?使用Hystrix有哪些适用场景

  1. HystrixspringCloud的组件之一,Hystrix 可以让我们在分布式系统中对服务间的调用进行控制
  2. 加入一些调用延迟或者依赖故障的容错机制。Hystrix 通过将依赖服务进行资源隔离
  3. 进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;
  4. 同时Hystrix 还提供故障时的 fallback 降级机制。
  5. 通过这些方法帮助我们提升分布式系统的可用性和稳定性。
  6. 在高并发访问下,这些依赖的稳定性与否对系统的影响非常大,
  7. 但是依赖有很多不可控问题:如网络连接缓慢,资源繁忙,暂时不可用,服务脱机等.

二·导入Hystrix相关依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  4. </dependency>

三·在启动类上加上@EnableHystrix

  1. @SpringBootApplication
  2. @EnableFeignClients
  3. @EnableApolloConfig
  4. @ComponentScan(basePackages = "com.demo.Hystrix")
  5. @EnableHystrix
  6. public class ApiApplication extends SpringBootServletInitializer {
  7. public static void main(String[] args) {
  8. SpringApplication.run(ApiApplication.class, args);
  9. }

四·在需要限流的方法中使用Hystrix

  1. @HystrixCommand(groupKey="test-provider",
  2. threadPoolKey="test-provider",
  3. threadPoolProperties = {
  4. @HystrixProperty(name = "coreSize", value = "20"),//线程池大小
  5. @HystrixProperty(name = "maximumSize", value = "30"),//最大线程池大小
  6. @HystrixProperty(name = "maxQueueSize", value = "20"),//最大队列长度
  7. @HystrixProperty(name = "keepAliveTimeMinutes", value = "2")//线程存活时间
  8. },commandProperties = {
  9. @HystrixProperty(name = "execution.isolation.strategy",value = "THREAD"),
  10. @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "60000" ),
  11. //此处有坑,若中断时间不设置,上面所有参数都可能失效
  12. @HystrixProperty(name = "execution.isolation.thread.interruptOnTimeout",value = "300000" )
  13. },
  14. //fallbackMethod必须重写,否则直接进入fallback方法中!!!!!!
  15. //此处的testfallback,为第五步中重写的方法!!!!!!
  16. fallbackMethod = "testfallback")
  17. @ApiOperation(value = "Hystrix测试接口")
  18. @PostMapping("/testHystrix")
  19. @Log(value = "Hystrix测试接口")
  20. public DefaultResponse<WeekendFlightCardCancelFrontResponse> weekendFlightCardCancelFront(@RequestBody WeekendFlightCardCancelFrontRequestVO req) {
  21. //
  22. ......
  23. }

五·重写fallback方法

  1. public DefaultResponse<Response> unlimitedFlightCreateOrderfallback(HttpServletRequest request, HttpServletResponse response, @RequestBody UnlimitedFlightCreateOrderReq req) {
  2. DefaultResponse defaultResp = new DefaultResponse();
  3. defaultResp.setCode(Integer.parseInt(ServiceStatus.RankFAIL.getCode()));
  4. defaultResp.setMessage("系统繁忙,请稍后再试");
  5. return defaultResp;
  6. }

六· 使用总结,此处介绍三个使用过程中的三个大坑

1.必须设置中断时间,若不设置所有参数都可能失效

2.第四步中的@HystrixCommand等注解只能在service层中使用,在controller中使用,hystrix的限流作用会失效

3.必须重写fallbackMethod的fallback方法,不重写的话默认直接进入fallback方法

Hystrix入门教程的更多相关文章

  1. Spring Cloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard 和 Turbine

    1. Hystrix Dashboard (断路器:hystrix 仪表盘)  Hystrix一个很重要的功能是,可以通过HystrixCommand收集相关数据指标. Hystrix Dashboa ...

  2. Spring Cloud 入门教程(七): 熔断机制 -- 断路器

    对断路器模式不太清楚的话,可以参看另一篇博文:断路器(Curcuit Breaker)模式,下面直接介绍Spring Cloud的断路器如何使用. SpringCloud Netflix实现了断路器库 ...

  3. Spring Cloud 入门教程(九): 路由网关zuul

    在微服务架构中,需要几个关键的组件,服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个组件可以组建一个简单的微服务架构.客户端的请求首先经过负载均衡(zuul.Ngnix),再 ...

  4. sentinel (史上最全+入门教程)

    文章很长,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈 为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 < Java 高并发 三部曲 > 面试必备 + 大厂 ...

  5. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  6. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  7. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  8. Content Security Policy 入门教程

    阮一峰文章:Content Security Policy 入门教程

  9. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

随机推荐

  1. Rocket - tilelink - Xbar

    https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q   简单介绍Xbar的实现.   ​​   1. 基本介绍   用于为Xbar的输入和输出连接生成内 ...

  2. Java实现 LeetCode 558 四叉树交集(四叉树,第一次遇到,研究了半天)

    558. 四叉树交集 四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft.topRight.bottomLeft 和 bottomRight.四叉树通常被用来划分一个二维空间,递归地将其 ...

  3. Java实现 蓝桥杯 算法提高 上帝造题五分钟

    算法提高 上帝造题五分钟 时间限制:1.0s 内存限制:256.0MB 问题描述 第一分钟,上帝说:要有题.于是就有了L,Y,M,C 第二分钟,LYC说:要有向量.于是就有了长度为n写满随机整数的向量 ...

  4. Java实现 LeetCode 133 克隆图

    133. 克隆图 给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆). 图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node]). class Node { ...

  5. 第五届蓝桥杯JavaA组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个 ...

  6. Java实现第十届蓝桥杯不同子串

    试题 C: 不同子串 本题总分:10 分 [问题描述] 一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串.例如,字符串aaab 有非空子串a, b, aa, ab, aaa, ...

  7. Java实现第八届蓝桥杯外星日历

    外星日历 题目描述 某星系深处发现了文明遗迹. 他们的计数也是用十进制. 他们的文明也有日历.日历只有天数,没有年.月的概念. 有趣的是,他们也使用了类似"星期"的概念, 只不过他 ...

  8. Python内置Turtle绘图库方法简介+多案例

    urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...

  9. 全网最全95道MongoDB面试题1万字详细解析

    1.mongodb是什么? MongoDB 是由 C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在给 WEB ...

  10. MySQL数据库离线包安装与注册

    本文主要介绍了MySQL数据库的离线安装和将MySQL服务注册为Windows应用服务的主要步骤. 1.下在安装程序包 MySQL Community Server 5.6.15 官方下载地址http ...