我使用Apache commons HTTP客户端API从Java代码中使用REST Web服务 . 如果在连接管理器参数中配置的套接字超时值内没有返回响应,则发生套接字超时异常 . 在线程将异常返回给调用者类的情况下,即使REST服务在几秒后返回响应,也会丢失 .
是否有可能创建一个新的线程,即使在超时后仍然会监听服务,只记录响应,而主线程将异常返回给调用者类?
有没有更好的方法来实现这一目标?
谢谢 .
您最有可能寻找的模式涉及异步请求 . 对于您发布的每个操作,您都会创建一个唯一的“作业”ID,并使用该作业状态的特定URL . 启动作业后,您可以查询该特定作业实例的状态 . 例如:
POST到 /actions
返回 202 Accepted 并将 Location Headers 包含在 /actions/results/1234 中
202 Accepted
Location
立即获取 /actions/results/1234 以确定其状态 .
如果它返回2xx,你的工作就完成了 .
如果它返回404,等待10秒(或其他)并再试一次 .
对结果感到满意后,发出DELETE到 /actions/results/1234 以自行清理 .
当然,如果没有完成工作,你不必返回404,还有其他检查状态的策略 - 关键是它是后续调用 .
1 回答
您最有可能寻找的模式涉及异步请求 . 对于您发布的每个操作,您都会创建一个唯一的“作业”ID,并使用该作业状态的特定URL . 启动作业后,您可以查询该特定作业实例的状态 . 例如:
POST到 /actions
返回
202 Accepted
并将Location
Headers 包含在 /actions/results/1234 中立即获取 /actions/results/1234 以确定其状态 .
如果它返回2xx,你的工作就完成了 .
如果它返回404,等待10秒(或其他)并再试一次 .
对结果感到满意后,发出DELETE到 /actions/results/1234 以自行清理 .
当然,如果没有完成工作,你不必返回404,还有其他检查状态的策略 - 关键是它是后续调用 .