【问题标题】:Hystrix Threadpool Queue not working properlyHystrix 线程池队列无法正常工作
【发布时间】:2016-02-25 07:25:13
【问题描述】:

我正在使用 Hystrix 库来处理网络调用。这就是我用于线程池配置的内容

HystrixThreadPoolProperties.Setter threadPropSetter = HystrixThreadPoolProperties.Setter();
threadPropSetter.withCoreSize(100);
threadPropSetter.withMaxQueueSize(1000);

我正在使用常用的 HytrixCommandKey 和 HytrixThreadPoolKey 创建 1000 个 HytrixCommand 对象的负载。但是线程池在服务前 100 个线程后执行回退逻辑,而不是使用线程池队列。这可以通过将threadpool,coreSize设置为1000来解决。但是我使用的是java,将coreSize设置为1000会产生1000个线程,这会消耗大量的系统资源。

谁能为此提供解决方案,以便线程池队列实际上可以对线程进行排队,而不是仅仅恢复到回退逻辑?

【问题讨论】:

  • 请发布一些代码示例,展示您如何创建和执行命令。这看起来像预期的行为是您没有收获命令的结果。
  • @OldCurmudgeon - 问题已解决。我实际上是在我的 main 方法中为 1000 个命令运行一个循环。所以jvm在循环完成后终止。由于 hystrix 线程池基本上使用守护线程,所以队列中的线程在 jvm 终止后没有被拾取。所以我只是在循环完成后在我的 main 方法中添加了一个 Thread.sleep(),现在排队工作正常。

标签: java multithreading threadpool


【解决方案1】:

刚刚在我的 main 方法中添加了一个 Thread.sleep() 以便在命令创建和排队后 JVM 不会终止。现在工作正常。

【讨论】:

    猜你喜欢
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多