Spring 集成:Http 请求 -> 响应 -> 处理 -> 如果有更多数据可用 -> 循环并重复直到没有收到数据

Spring Integration : Http Request -> Response -> Process -> If more data available -> Loop and Repeat until no data received

我必须查询带有偏移量和限制的 http 端点,直到不再有数据存在。例如,

POST 1 -> {"offset" : 0, "limit" : 50} : Returned 50 records -> continue to poll next offset

POST 2 -> {"offset" : 50, "limit" : 50} : Returned 25 records -> stop polling (25 < limit, so no more records)

如何在 spring 集成中使用 Service Activator 和 HTTP Outbound Gateway 通过动态请求主体 {"offset" : a, "limit" : b} 实现此循环? 我查看了文档

中的轮询消费者和向端点添加行为 section

一种选择是在 Service Activator 中添加循环逻辑,并使用网关将消息引入通道。

是否有更好的方法来执行此操作(包括错误处理)?

可以使用 router 组件完成循环。因此,您执行一些处理逻辑,然后将消息转发到路由器,以确定您是否需要再次调用 HTTP 网关,并只发送一条在有效负载中带有适当 offset 或 headers.[=15 的消息=]

因此,使用伪代码可能如下所示:

发送偏移量为 0 的消息 -> httpInputChannel -> HTTP 网关 -> 进程 -> 路由器。

路由函数应决定将新的偏移量发送回 httpInputChannel 或退出到下一个通道。

查看路由器组件:https://docs.spring.io/spring-integration/docs/current/reference/html/message-routing.html#messaging-routing-chapter

可以使用该 HTTP 出站网关上的 ExpressionEvaluatingRequestHandlerAdvice 完成错误处理:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#expression-advice