【问题标题】:Timelimiter is not interrupting the threadTimelimiter 没有中断线程
【发布时间】:2022-07-15 20:15:18
【问题描述】:

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

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

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

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

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;
}
}

【问题讨论】:

    标签: java multithreading resilience4j time-limiting


    【解决方案1】:

    你是怎么解决的?我读到你需要使用 Future,但它对我也不起作用

    ExecutorService executorService = Executors.newSingleThreadExecutor();
    Future<String> future = executorService.submit(() -> someService.doSomething());
    return timeLimiterWithDefaultConfig.executeFutureSupplier(()->future);
    

    【讨论】:

    • 欢迎来到 Stack Overflow!如果您有新问题,请点击 按钮提出问题。如果您有足够的声誉,you may upvote 的问题。或者,将其“加注”为收藏夹,您将收到任何新答案的通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多