Java & Spring - 轮询 http 端点直到服务器完成处理
Java & Spring - polling the http endpoint until the server finishes processing
我正在努力寻找以固定间隔(例如~1 秒)轮询服务器的正确方法。
流程如下
- 客户端应用程序收到消息,表明可以使用提供的参数开始轮询(不需要时不轮询)
- 客户端应用程序开始每隔 1 秒轮询一次 http 端点,参数随消息一起到达(如查询参数)
- 服务器应用程序以状态 pending 响应,这表明客户端应该继续轮询
- 服务器应用程序响应状态 finished 和 returns 结果 - 无需继续轮询。
我们可以有多个线程,因为客户端应用程序可能会在短时间内收到多条消息 - 轮询应该立即开始
我不想重新发明轮子,也许有适合 java/spring 的工具我可以使用?
主要特点
- 只在需要时才轮询
- 使用自定义参数进行轮询(查询字符串中的自定义参数)
- 扩展轮询,因为应用程序可以以相同的时间间隔同时轮询多个端点
我正在浏览 Apache Camel 或 Spring Integration PollableChannel 等各种库,但我觉得其中 none 将为我提供开箱即用的正确解决方案。
如果没有这样的库 - 我将使用 redis 和简单循环自己编写它,但也许有人遇到过类似的问题。
如果我正确理解您的体系结构,关键是从客户端应用程序调用相同的 HTTP 端点,直到获得预期结果。在这种情况下,我建议使用 RequestHandlerRetryAdvice
和 AlwaysRetryPolicy
和 FixedBackOffPolicy
(默认为 1 秒)。
为了模拟异常,我建议使用 propagateOnSuccessEvaluationFailures = true
选项的 ExpressionEvaluatingRequestHandlerAdvice
当服务器回复 pending
时从 onSuccessExpression
重新抛出异常.
这两个建议(确切地说 RequestHandlerRetryAdvice
、ExpressionEvaluatingRequestHandlerAdvice
)您需要向 @ServiceActivator
申请 HttpRequestExecutingMessageHandler
。
我正在努力寻找以固定间隔(例如~1 秒)轮询服务器的正确方法。
流程如下
- 客户端应用程序收到消息,表明可以使用提供的参数开始轮询(不需要时不轮询)
- 客户端应用程序开始每隔 1 秒轮询一次 http 端点,参数随消息一起到达(如查询参数)
- 服务器应用程序以状态 pending 响应,这表明客户端应该继续轮询
- 服务器应用程序响应状态 finished 和 returns 结果 - 无需继续轮询。
我们可以有多个线程,因为客户端应用程序可能会在短时间内收到多条消息 - 轮询应该立即开始
我不想重新发明轮子,也许有适合 java/spring 的工具我可以使用?
主要特点
- 只在需要时才轮询
- 使用自定义参数进行轮询(查询字符串中的自定义参数)
- 扩展轮询,因为应用程序可以以相同的时间间隔同时轮询多个端点
我正在浏览 Apache Camel 或 Spring Integration PollableChannel 等各种库,但我觉得其中 none 将为我提供开箱即用的正确解决方案。
如果没有这样的库 - 我将使用 redis 和简单循环自己编写它,但也许有人遇到过类似的问题。
如果我正确理解您的体系结构,关键是从客户端应用程序调用相同的 HTTP 端点,直到获得预期结果。在这种情况下,我建议使用 RequestHandlerRetryAdvice
和 AlwaysRetryPolicy
和 FixedBackOffPolicy
(默认为 1 秒)。
为了模拟异常,我建议使用 propagateOnSuccessEvaluationFailures = true
选项的 ExpressionEvaluatingRequestHandlerAdvice
当服务器回复 pending
时从 onSuccessExpression
重新抛出异常.
这两个建议(确切地说 RequestHandlerRetryAdvice
、ExpressionEvaluatingRequestHandlerAdvice
)您需要向 @ServiceActivator
申请 HttpRequestExecutingMessageHandler
。