如何在超时后返回时获得响应

时间:2015-12-15 18:58:43

标签: java rest http apache-commons

我使用Apache commons HTTP客户端API从Java代码中使用REST Web服务。如果在连接管理器参数中配置的套接字超时值内没有返回响应,则发生套接字超时异常。在这种情况下,线程将异常返回给调用者类,即使REST服务在几秒后返回响应,也会丢失。

是否有可能创建一个新的线程,即使在超时后仍然会监听服务,只记录响应,而主线程将异常返回给调用者类?

有没有更好的方法来实现这一目标?

感谢。

1 个答案:

答案 0 :(得分:0)

您最有可能寻找的模式涉及异步请求。对于您发布的每个操作,您都会创建一个唯一的“作业”ID,并使用该作业状态的特定URL。启动作业后,您可以查询该特定作业实例的状态。例如:

  1. 发布到 / actions
  2. 返回202 Accepted&在 / actions / results / 1234
  3. 中添加Location标题
  4. 立即获取 / actions / results / 1234 以确定其状态。
    • 如果它返回2xx,您的工作就完成了。
    • 如果它返回404,请等待10秒(或其他)并再试一次。
  5. 对结果感到满意后,请发送一个DELETE到 / actions / results / 1234 以便自行清理。
  6. 当然,如果没有完成工作,你不必返回404,还有其他检查状态的策略 - 关键是它是后续的电话。