• spring cloud 实践之hystrix注意事项


    当我们写类似下面代码时

    package demo1.demo1;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
    import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
    
    @RestController
    public class TestRest {
    
        protected final static Logger logger = LoggerFactory.getLogger(TestRest.class);
        @HystrixCommand(commandProperties = {
                @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "20000") }, threadPoolProperties = {
                        @HystrixProperty(name = "coreSize", value = "64") }, threadPoolKey = "test1")
        @GetMapping("/testdemo1")
        public long getStringtest2() {
            logger.info("我收到了其他服务调用");
            // 返回当前时间毫秒 来发现访问变化
            
            return System.currentTimeMillis();
        }
        
    
    }

    如果方法之间有嵌套(注意不要像下面那样写

    package demo1.demo1;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
    import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
    
    @RestController
    public class TestRest {
    
        protected final static Logger logger = LoggerFactory.getLogger(TestRest.class);
        @HystrixCommand(commandProperties = {
                @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "20000") }, threadPoolProperties = {
                        @HystrixProperty(name = "coreSize", value = "64") }, threadPoolKey = "test1")
        @GetMapping("/testdemo1")
        public long getStringtest2() {
            logger.info("我收到了其他服务调用");
            // 返回当前时间毫秒 来发现访问变化
            
            //报个异常试试
            //int a=1/0;
            test();
            
            return System.currentTimeMillis();
        }
        @HystrixCommand(commandProperties = {
                @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "20000") }, threadPoolProperties = {
                        @HystrixProperty(name = "coreSize", value = "64") }, threadPoolKey = "test1")
        private void test(){
            //code
            
        }
    
    }

    因为使用了@HystrixCommand注解之后方法会放到隔离线程池中执行已经不再是tomcat或jetty等容器创建的web http线程池执行方法了,如果有两个可能会占用两个被隔离的线程执行方法。

     

  • 相关阅读:
    [LeetCode] 1218. Longest Arithmetic Subsequence of Given Difference 最长定差子序列
    [LeetCode] 1217. Minimum Cost to Move Chips to The Same Position 玩筹码
    [LeetCode] 1209. Remove All Adjacent Duplicates in String II 移除字符串中所有相邻的重复字符之二
    [.Net Core] Visual Studio for Mac Add Client Side Library
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
  • 原文地址:https://www.cnblogs.com/zhyg/p/9482252.html
Copyright © 2020-2023  润新知