首页 文章

如何在超时发生后返回响应

提问于
浏览
0

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

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

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

谢谢 .

1 回答

  • 0

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

    • POST到 /actions

    • 返回 202 Accepted 并将 Location Headers 包含在 /actions/results/1234

    • 立即获取 /actions/results/1234 以确定其状态 .

    • 如果它返回2xx,你的工作就完成了 .

    • 如果它返回404,等待10秒(或其他)并再试一次 .

    • 对结果感到满意后,发出DELETE到 /actions/results/1234 以自行清理 .

    当然,如果没有完成工作,你不必返回404,还有其他检查状态的策略 - 关键是它是后续调用 .

相关问题