hystrix使用场景,hystrix教程

  hystrix使用场景,hystrix教程

  

目录

什么是高起鳞癣一、背景二、使用方式2.1罐包引入2.2 配置文件2.3 设置配置2.4 实现代码三、测试试验四、总结

 

  

什么是Hystrix

Hystrix是出租DVD(网站)针对微服务分布式系统的熔断保护中间件,当我们的客户端连接远程的微服务时,有两种情况需要考虑:首先,如果远程系统当机了我们怎么办?

 

  其次,我们如何管理对远程微服务的调用性能,以保证每个微服务以最小延迟最快性能响应?

  高起鳞癣是一个有关延迟和失败容错的开源库包,用来设计隔离访问远程系统端点或微服务等,防止级联爆炸式的失败,也就是由一个小问题引起接二连三扩大的

  疯狂的错误爆炸直至整个系统瘫痪,能够让复杂的分布式系统更加灵活具有弹性。这篇文章给大家介绍下在项目中如何直接使用海斯特里克斯?

  

一、背景

最近由于一些背景原因,需要在项目中需要对接口进行限流。所以就考虑到了直接使用海斯特里克斯。但是呢,又不想直接使用春云,而是直接引入原生,现在发现挺好用的,所以记录下来,分享出来。

 

  

二、使用方式

 

  

2.1 Jar包引入

依赖关系groupIdcom.netflix.hystrix/groupId artifactIdhystrix-Java nica/artifactId版本1 .5 .18/版本/依赖关系groupIdcom.netflix.hystrix/groupId artifactIdhystrix-core/artifactId版本1 .5 .18/版本/依赖关系引入两个包,分别是高起鳞癣核心包,以及直接原生的爪哇包

 

  

2.2 配置文件

在资源目录下面,放上海斯特里克斯。属性文件。配置如下。

 

  海斯特里克斯。命令。默认。执行。孤立。线程。timeoutinmillseconds=3000 hystrix。命令。默认。后退。孤立。旗语。maxconcurrentrequests=1000 hy strix。命令。默认。断路器。请求体积阈值=20 hystrix。命令。默认。度量标准。滚动统计。numbuckets=10 hystrix。命令。默认。度量标准。滚动统计。timeinmillisecond秒=10000 hystrix。命令。默认。电路

  strix.timer.threadpool.default.coreSize = 10这个是一部分配置,如果需要知道更多,可以Click-Github Hystrix Wiki

  

 

  

2.3 设置配置

设置Hystrix的配置

 

  

/** * <p>熔断器配置</p> * * @author fattycal@qq.com * @since 2022/6/4 */@Configurationpublic class HystrixConfig implements InitializingBean { @Bean public HystrixCommandAspect hystrixCommandAspect(){ // 初始化切面 return new HystrixCommandAspect(); } @Override public void afterPropertiesSet() throws Exception { // 初始化熔断器配置 // 清除配置 ConfigurationManager.getConfigInstance().clear(); // 加载配置文件 ConfigurationManager.loadCascadedPropertiesFromResources("hystrix"); }}

HystrixCommandAspect是jar包带的切面,通过切面通知,找去需要熔断的方法,然后进行处理。

 

  

@Aspectpublic class HystrixCommandAspect { //...略 @Pointcut("@annotation(com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand)") public void hystrixCommandAnnotationPointcut() { } @Pointcut("@annotation(com.netflix.hystrix.contrib.javanica.annotation.HystrixCollapser)") public void hystrixCollapserAnnotationPointcut() { } @Around("hystrixCommandAnnotationPointcut() hystrixCollapserAnnotationPointcut()") public Object methodsAnnotatedWithHystrixCommand(final ProceedingJoinPoint joinPoint) throws Throwable { // ... 略 }}

ConfigurationManager看看这名字,就知道是配置管理的,也不负众望,的确是用来加载配置的。

 

  

 

  

2.4 实现代码

/** * <p>熔断器测试</p> * * @author fattycal@qq.com * @since 2022/6/4 */@RestControllerpublic class HystrixTestController { @GetMapping("/hystrix") @HystrixCommand(commandKey = "hystrixTestController-getHello", threadPoolKey = "hystrixTestController-getHello", fallbackMethod = "getHelloFallback") public String getHello(){ try { // 执行太快不便于测试 Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } return "TEST Hystrix"; } public String getHelloFallback(Throwable error){ // 打印日志 System.out.println("TEST Hystrix: " + error.getMessage()); return "TEST Hystrix: " + error.getMessage(); }}

代码没有啥花里胡哨的,直接在需要熔断的方法上面加上HystrixCommond。

 

  commandKeythreadPoolKey是自己设置的,可以为这个方法定制线程数、核心线程等配置(在hystrix.properties中添加)。给出示例如下。

  

#-------------------------------------------------------------------hystrix.threadpool.hystrixTestController-getHello.coreSize=1hystrix.threadpool.hystrixTestController-getHello.maximumSize=2hystrix.threadpool.hystrixTestController-getHello.maxQueueSize=1hystrix.threadpool.hystrixTestController-getHello.queueSizeRejectionThreshold=2#-------------------------------------------------------------------

 

  

至此,完成了所有的配置和准备,接下来直接测试

 

  

 

  

三、测试试验

直接从Jmeter官网下载jmeter,拿到跑测试, 具体下载过程就不一样展示了,直接贴出测试结果。

 

  

 

  由于为这个方法设置的核心线程数、线程数、队列数都不大,很容易测试出结果。我们可以从console中很明显的看到熔断器打开,说明方法被执行到。

  在从Jmeter中查看一下结果,也是可以佐证我们的效果。测试图如下:

  

 

  

 

  

四、总结

自此,整个流程是走完了,可以看到效果着实起来了。 Hystrix知识限流熔断中的一种方案,大家可以结合实际情况做出更多的选择。

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: