[英]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.