Hystrix参数配置
2、Hystrix参数配置示例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController; import com.mimaxueyuan.consumer.turbine.service.MyService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import com.netflix.hystrix.contrib.javanica.conf.HystrixPropertiesManager; @RestController
public class HystrixController { @Autowired
private MyService myService; /**
* @HystrixCommand由名为“javanica”的Netflix contrib库提供 。
* Spring Cloud在连接到Hystrix断路器的代理中使用该注解自动包装Spring bean。
* 断路器计算何时打开和关闭电路,以及在发生故障时应该做什么。
*
* @author Kevin
* @Title: get
* @param id
* @return
* @return: String
*/
@GetMapping("/get1/{id}")
@HystrixCommand(fallbackMethod = "getError")
public String get1(@PathVariable String id) {
try {
System.out.println(Thread.currentThread().getName()+":get1 before sleep 5s....");
Thread.sleep(1000 * 5);
System.out.println(Thread.currentThread().getName()+":get1 after sleep 5s....");
} catch (InterruptedException e) {
e.printStackTrace();
}
return "kevin.get1." + id;
} /**
* 配置Hystrix隔离策略,默认为THREAD,隔离策略分为THREAD、SEMAPHORE两种
*
* execution.isolation.strategy 默认为THREAD
*
* @param id
* @return
* @author lynch
*/
@GetMapping("/get2/{id}")
@HystrixCommand(fallbackMethod = "getError", commandProperties = {
// @HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY, value="THREAD")
@HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY, value = "SEMAPHORE") })
public String get2(@PathVariable String id) {
try {
System.out.println(Thread.currentThread().getName()+":get2 before sleep 5s....");
Thread.sleep(1000 * 5);
System.out.println(Thread.currentThread().getName()+":get2 after sleep 5s....");
} catch (InterruptedException e) {
e.printStackTrace();
}
return "kevin.get2." + id;
} /**
* 设置HystrixCommand的执行是否在超时发生时被中断。使用线程隔离时,是否对命令执行超时的线程调用中断(Thread.interrupt())操作
*
* execution.isolation.thread.interruptOnTimeout 参数,默认为true
*
* @param id
* @return
* @author lynch
*/
@GetMapping("/get3/{id}")
@HystrixCommand(fallbackMethod = "getError",commandProperties= {
//设置超时的时候不中断线程,默认为true
@HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value="false")
})
public String get3(@PathVariable String id) {
try {
System.out.println(Thread.currentThread().getName()+":get3 before sleep 5s....");
Thread.sleep(1000 * 5);
System.out.println(Thread.currentThread().getName()+":get3 after sleep 5s....");
} catch (InterruptedException e) {
e.printStackTrace();
}
return "kevin.get3." + id;
} /**
* 设置调用线程产生的HystrixCommand.getFallback()方法的允许最大请求数目。 如果达到最大并发数目,后续请求将会被拒绝,如果没有实现回退,则抛出异常。
* (这里需要注意一点,这个变量的命名不是很规范,它实际上对THREAD和SEMAPHORE两种隔离策略都生效)
*
* fallback.isolation.semaphore.maxConcurrentRequests默认为10
*
* @param id
* @return
* @author lynch
*/
@GetMapping("/get4/{id}")
@HystrixCommand(fallbackMethod = "getError",commandProperties= {
@HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY, value = "SEMAPHORE"),
@HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS,value="1")
})
public String get4(@PathVariable String id) {
try {
System.out.println(Thread.currentThread().getName()+":get4 before sleep 5s....");
Thread.sleep(1000 * 5);
System.out.println(Thread.currentThread().getName()+":get4 after sleep 5s....");
} catch (InterruptedException e) {
e.printStackTrace();
}
return "kevin.get4." + id;
} /**
* 设置HystrixCommand的执行是否有超时限制。
*
* execution.timeout.enabled 默认为true, 是否超时
*
* @param id
* @return
*/
@GetMapping("/get5/{id}")
@HystrixCommand(fallbackMethod = "getError",commandProperties= {
@HystrixProperty(name=HystrixPropertiesManager.EXECUTION_TIMEOUT_ENABLED,value="false")
})
public String get5(@PathVariable String id) {
try {
System.out.println(Thread.currentThread().getName()+":get5 before sleep 5s....");
Thread.sleep(1000 * 5);
System.out.println(Thread.currentThread().getName()+":get5 after sleep 5s....");
} catch (InterruptedException e) {
e.printStackTrace();
}
return "kevin.get5." + id;
} /**
* 设置调用者等待命令执行的超时限制,超过此时间,HystrixCommand被标记为TIMEOUT,并执行回退逻辑。
* 注意:超时会作用在HystrixCommand.queue(),即使调用者没有调用get()去获得Future对象。
*
* execution.isolation.thread.timeoutInMilliseconds 默认为1000
*
* @param id
* @return
* @author lynch
*/
@GetMapping("/get6/{id}")
@HystrixCommand(fallbackMethod = "getError",commandProperties= {
@HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS,value="6000")
})
public String get6(@PathVariable String id) {
try {
System.out.println(Thread.currentThread().getName()+":get6 before sleep 5s....");
Thread.sleep(1000 * 5);
System.out.println(Thread.currentThread().getName()+":get6 after sleep 5s....");
} catch (InterruptedException e) {
e.printStackTrace();
}
return "kevin.get6." + id;
} public String getError(String id) {
System.out.println(Thread.currentThread().getName()+":getError before ....");
myService.execute();
System.out.println(Thread.currentThread().getName()+":getError after ....");
return "超时错误,使用断路器返回" + id;
}
}
Hystrix参数配置的更多相关文章
- Hystrix【参数配置及缓存】
1.常用参数说明 hystrix参数的详细配置可参照 https://github.com/Netflix/Hystrix/wiki/Configuration 下面是一些常用的配置: 配置项 默认值 ...
- hystrix参数使用方法
hystrix+feign+ribbon,但是可能很多人都知道hystrix还有线程隔离,信号量隔离,等等各种参数配置,在这几就记录下hystrix的参数, 一.hystrix参数使用方法 通过注解@ ...
- SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)
1.概念:Hystrix 熔断机制 2.具体内容 所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢? 当现在服务的 ...
- Hystrix属性配置策略
Hystrix属性配置 Command可配参数 设置隔离策略 execution.isolation.strategy = THREAD 设置超时时间 execution.isolation.thre ...
- Hystrix断路器配置属性解析
HystrixCommand 配置方式 我们的配置都是基于 HystrixCommand 的,我们通过在方法上添加 @HystrixCommand 注解并配置注解的参数来实现配置,但有的时候一个类里面 ...
- 转:浅谈UNIX下Apache的MPM及httpd.conf配置文件中相关参数配置
为什么要并发处理 以Apache为代表的web服务器中,如果不支持并发,则在一个客户端连接的时候,如果该客户端的任务没有处理完,其他连接的客户端将会一直处于等待状态,这事不可想象的,好像没有为什么要不 ...
- Spark on Yarn:任务提交参数配置
当在YARN上运行Spark作业,每个Spark executor作为一个YARN容器运行.Spark可以使得多个Tasks在同一个容器里面运行. 以下参数配置为例子: spark-submit -- ...
- Production环境中iptables常用参数配置
production环境中iptables常用参数配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我相信在实际生产环境中有很多运维的兄弟跟我一样,很少用到iptables的这个 ...
- Unity3D安卓打包参数配置与兼容性的关系分析
前言 在使用Unity3D工程导出安卓安装包的时候,往往会遇到兼容性的问题,针对某些机型,要么无法打开游戏,要么会出现卡机的现象.面对这种情况,我们可以调节相关的参数来提高兼容性. 为了了解在打包时候 ...
随机推荐
- Django formset
一 什么是formset Form组件或ModelForm用于做一个表单验证而formset是用于做多个表单的验证组件,用于做批量操作 二 formset的使用方法 1 设置form信息 class ...
- node.js中 express + multer 处理文件上传
multer中间件,可以很方便的结合express处理用户表单上传的文件. 一.安装multer npm install multer 二.处理单个文件上传 const express = requi ...
- JavaSE基础知识(4)—数组的应用
一.数组的特点.好处及使用步骤 1.数组的好处 特点:相当于用于保存一组元素的容器好处: 1.提高代码的简洁性和扩展性,且同时开辟多个空间,提高了效率 2.分类存储,且空间是连续的,容易查找 2.数组 ...
- 设置textfield 文字左边距
默认情况下,当向textField输入文字时,文字会紧贴在textField左边框上.我们可以通过设置textField的leftView,设置一个只有宽度的leftView.这样还不够,因为默认le ...
- C#实现局部峰值查找,功能对应Matlab中的findpeaks.m(转)
相关算法的原理参考Ronny,地址:图像分析:投影曲线的波峰查找,这里感谢下原作者. 参照C++的代码实现,我用C#翻译了下,其实原理也很简单的,下面放相关实现代码: private double[] ...
- c++沉思录 学习笔记 第五章 代理类
Vehicle 一个车辆的虚基类 class Vehicle {public: virtual double weight()const = 0; virtual void start() = 0; ...
- java多线程系列17 ThreadLocal
ThreadLocal 叫做 线程局部变量 在详细解释之前 先看一段代码 public class ThreadLocalTest { private static ThreadLocal<In ...
- mui.init()和mui.plusReady()
1.每个用到mui的页面都调用下mui.init.2.如果需要使用大H5+对象,就写到plusReady中,如plus对象. HTML5+扩展api是针对手机APP的,只有才手机应用(比如手机浏览器) ...
- Unity、C#读取XML
有如下XML文件: <?xml version="1.0" encoding="UTF-8"?> <DataNode> <prov ...
- Unity3D之物理射线
射线:从一个点往一个方向,发射一根无限长的射线,这根射线会与场景中带有 Collider 组件的物体发生碰撞. 射线的使用: public class Test { private void Star ...