繁体   English   中英

Timelimiter 没有中断线程

[英]Timelimiter is not interrupting the thread

我在我的项目中使用了resilience4j Timelimiter。

如果请求耗时超过 10 秒,时间限制器会抛出错误,但不会中断线程。

当调用来自 postman 时,我已经进行了调试和测试,在 postman 中的 10 秒后它显示一个异常,但线程仍然执行该方法,然后添加一些打印语句并且它也执行了。

10s后resilience4j中如何取消或中断线程。

class A {
TimeLimiterConfig config = TimeLimiterConfig.custom().cancelRunningFuture(true)
      .timeoutDuration(Duration.ofMillis(TimeLimit)).build();

TimeLimiterRegistry timeLimiterRegistry = TimeLimiterRegistry.of(config);

TimeLimiter timeLimiter = timeLimiterRegistry.timeLimiter("APITimelimiter", config);


public Response someMethod() throws Exception {
try {
  timeLimiter.executeFutureSupplier(() -> CompletableFuture.supplyAsync(() -> {
            return getData();
          }));
} catch (Exception e) {
      logger.error("Request has crossed the execution time of " + TimeLimit
          + " seconds");
      throw new Exception("Your request has crossed the execution time of "+ TimeLimit+" seconds.");
    }
}

public UserData getData() {
String jsonData = "";
return jsonData;
}
}

TimeLimiter 无法取消 CompletableFuture。 请参阅@TimeLimiter 超时慢方法但不取消正在运行的未来 #905指出:CompletableFuture 情况下的有限 cancel() 不是错误,而是设计决定。 CompletableFuture 本身并不绑定到任何线程,而 Future 几乎总是代表后台任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM