如何在 JAX-RS API 中添加超时
Posted
技术标签:
【中文标题】如何在 JAX-RS API 中添加超时【英文标题】:How to add timeout in JAX-RS API 【发布时间】:2019-05-26 04:38:05 【问题描述】:我有一个可以长时间工作的 JAX-RS API,并且客户端通过 ajax 调用来调用 API。客户端收到 503 状态 - 50 秒后服务不可用。
如何增加此超时值。我尝试增加tomcat(托管API)中的连接超时。我也尝试在 ajax 调用中添加超时,但这也没有用。
【问题讨论】:
您需要在客户端设置超时值。根据客户端的实现和版本,有不同的方法来设置超时。你用的是哪个客户端?可以分享一下代码吗? 【参考方案1】:您可以使用Suspended
注释并创建一个TimeoutHandler
。
不确定是否需要使用此示例增加 tomcat 中的超时时间。
public class Resource
private Executor executor = Executors.newSingleThreadExecutor();
@GET
public void asyncGet(@Suspended final AsyncResponse asyncResponse)
asyncResponse.setTimeoutHandler(new TimeoutHandler()
@Override
public void handleTimeout(AsyncResponse asyncResponse)
asyncResponse.resume("Processing timeout.");
executor.shutdown();
);
asyncResponse.setTimeout(60, TimeUnit.SECONDS);
executor.submit(() ->
String result = someService.expensiveOperation();
asyncResponse.resume(result);
executor.shutdown();
);
球衣文档here
【讨论】:
我尝试了 TimeoutHandler 并将超时设置为 5 分钟,但客户端仍然收到 503 - 50 秒后服务不可用。以上是关于如何在 JAX-RS API 中添加超时的主要内容,如果未能解决你的问题,请参考以下文章
Jersey 框架如何在 REST 中实现 JAX-RS API?
如何使用符合 JAX-RS 2.0 的 RESTEasy 客户端 API 启用 NTLM 身份验证?
如何使用 Jax-RS(Jersey) 在 Tomcat7 上运行应用程序 Hibernate 5.x、Jpa 2.1、Java EE7(javaee-api 7.0)