【问题标题】:Timeout for Hystrix async callHystrix 异步调用超时
【发布时间】:2018-05-27 21:49:15
【问题描述】:

我第一次使用 Hystrix async 对第三方库进行set 调用,我真的不在乎数据是否成功发布。

public class SetCacheDataCommand extends BaseHystrixCommand {

    public SetCacheDataCommand(CacheClient cacheClient, String cacheKey, Entry cacheValue, int timeToLive) {
    super(HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(GROUP_NAME))
            .andCommandKey(HystrixCommandKey.Factory.asKey(COMMAND_NAME))
            .andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
            .withExecutionTimeoutInMilliseconds(DEFAULT_HYSTRIX_TIMEOUT_MILLISECONDS)));
    this.cacheClient = cacheClient;
    this.cacheKey = cacheKey;
    this.cacheValue = cacheValue;
    this.timeToLive = timeToLive;
}

@Override
protected Object run() throws Exception {
    cacheClient.set(cacheKey, cacheValue, timeToLive);
    return null;
}

Set 是一个 void 方法。这是命令调用:

....Doing something here

new SetCacheDataCommand(cacheClient, cacheKey, cacheValue, 10000).queue();

....Doing something here

我希望上面的代码能够处理这个调用异步。但我从 Hystrix documentation 阅读了以下内容。

注意:超时将在 HystrixCommand.queue() 上触发,即使调用者 永远不会在生成的 Future 上调用 get()。在 Hystrix 1.4.0 之前,只有 对 get() 的调用触发了超时机制在这种情况下生效 一个案例。

他们还提到:

请注意,每个命令都有关闭超时的配置, 如果需要(请参阅 command.timeout.enabled)。

几个问题:

  1. 如果我保持启用超时标志,这是否意味着行为将是同步的?如果我关闭超时标志,您是否发现任何问题?
  2. 如果池中有 20 个线程并且所有这些线程都忙于进行异步 Set 调用,会发生什么情况?

【问题讨论】:

    标签: java multithreading asynchronous hystrix


    【解决方案1】:

    如果我保持启用超时标志,这是否意味着行为将是同步的?如果我关闭超时标志,您是否发现任何问题?

    除非您在命令中调用execute,否则行为不会被阻止。此外,hystrix 执行与调用线程池(如 Tomcat 或任何服务器线程池)分离,并在该上下文中以并行方式执行。 您应该保持线程隔离timeout 以获得适当的值。另外,我建议给它比缓存客户端套接字超时更多的时间。如果您没有正确调整它们,您可能需要为该特定命令设置的线程池可能会饱和并且您会被拒绝。

    如果池中有 20 个线程并且所有这些线程都忙于进行异步 Set 调用会发生什么?

    您会收到执行拒绝异常。因此,我可能会建议专门针对您的情况调整timeoutsthread pool。并忽略故障,并在需要时让电路中断。

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 2017-01-10
      • 2016-04-21
      • 1970-01-01
      • 2015-12-12
      • 2021-10-12
      相关资源
      最近更新 更多