关于Hystrix超时机制和线程状态的测试观察和个人理解

本文通过测试观察,详细介绍了HystrixCommand在不同超时配置下的行为,包括RestTemplate与HystrixCommand超时的交互影响。在测试场景3中,即使HystrixCommand超时,实际的HTTP请求线程仍会继续执行直到完成。通过分析源码,揭示了HystrixCommand执行过程中的两个线程——任务执行线程和超时监听线程的工作原理,以及它们如何决定命令的超时状态。
摘要由CSDN通过智能技术生成

640?wx_fmt=jpeg

作者:未完成交响曲,资深Java工程师!目前在某一线互联网公司任职,架构师社区合伙人!

我们在使用Hystrix时,大部分情况下都是直接基于SpringCloud的相关注解来完成请求调用的。我们有个项目中是手动创建HystrixCommand来包裹RestTemplate发起请求的。但是在服务运行过程中,发现一个情况,就是当HystrixCommand超时返回fallback结果后,RestTemplate请求过程还没有结束,导致线程池占用较多。

这里通过一个简单的测试,对RestTemplate和HystrixCommand设置不同的超时时间,来观察在HystrixCommand执行过程中的细节。

测试观察

模拟外部服务:

创建一个springboot服务,提供一个接口:等待5秒后返回数据

@RestController
public class DataController {

    @RequestMapping("queryData")
    public String queryData() {
        // 等待5s后,返回随机字符串
        long sleepTime = 5000;
        try {
            Thread.sleep(sleepTime);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return UUID.randomUUID().toString();
    }
}
测试代码:
public class HystrixCommandTest {

    private static final SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");

    // http请求超时时间
    private static final int HTTP_TIMEOUT =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值