博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hystrix参数配置
阅读量:6073 次
发布时间:2019-06-20

本文共 6130 字,大约阅读时间需要 20 分钟。

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;@RestControllerpublic 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;    }}

 

转载地址:http://jmngx.baihongyu.com/

你可能感兴趣的文章
小孩的linux
查看>>
CSS3 transforms 3D翻开
查看>>
java基础---->正则表达式
查看>>
2.2013/06/13_log(n)+1
查看>>
关于加载iframe时进度条不消失的问题
查看>>
poj 3984迷宫问题【广搜】
查看>>
oracle ORA-01840:输入值对于日期格式不够长
查看>>
python基础知识~logger模块
查看>>
SIP入门(二):建立SIPserver
查看>>
Servlet3.0的异步
查看>>
WebService连接postgresql( 失败尝试)
查看>>
从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?...
查看>>
Python-MacOSX下SIP引起的pip权限问题解决方案(非取消SIP机制)
查看>>
从MFQ方法到需求分析
查看>>
android.view.WindowManager$BadTokenException: Unable to add window
查看>>
HDU5012:Dice(bfs模板)
查看>>
iphone openssh
查看>>
Linux下MEncoder的编译
查看>>
Xamarin使用ListView开启分组视图Cell数据展示bug处理
查看>>
Javascript中闭包(Closure)的探索(一)-基本概念
查看>>