Java & Spring - 轮询 http 端点直到服务器完成处理

Java & Spring - polling the http endpoint until the server finishes processing

我正在努力寻找以固定间隔(例如~1 秒)轮询服务器的正确方法。

流程如下

我们可以有多个线程,因为客户端应用程序可能会在短时间内收到多条消息 - 轮询应该立即开始

我不想重新发明轮子,也许有适合 java/spring 的工具我可以使用?

主要特点

我正在浏览 Apache Camel 或 Spring Integration PollableChannel 等各种库,但我觉得其中 none 将为我提供开箱即用的正确解决方案。

如果没有这样的库 - 我将使用 redis 和简单循环自己编写它,但也许有人遇到过类似的问题。

如果我正确理解您的体系结构,关键是从客户端应用程序调用相同的 HTTP 端点,直到获得预期结果。在这种情况下,我建议使用 RequestHandlerRetryAdviceAlwaysRetryPolicyFixedBackOffPolicy(默认为 1 秒)。

为了模拟异常,我建议使用 propagateOnSuccessEvaluationFailures = true 选项的 ExpressionEvaluatingRequestHandlerAdvice 当服务器回复 pending 时从 onSuccessExpression 重新抛出异常.

这两个建议(确切地说 RequestHandlerRetryAdviceExpressionEvaluatingRequestHandlerAdvice)您需要向 @ServiceActivator 申请 HttpRequestExecutingMessageHandler

在参考手册中查看更多信息:https://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#message-handler-advice-chain