目前我正在开发一个 Spring Integration 应用程序,该应用程序具有以下场景:
- An
int-http:outbound-gateway
从 REST-Services 读取分页元素列表:about in
- 每个页面内容被分割并存储在一个文件夹中,以便稍后由 Spring 批处理作业处理。
我对 spring-integration 很陌生,我不知道是否可以使用“int-http:outbound-gateway”创建一种循环来读取所有页面,直到最后一页。
我们讨论的是分成 2651 个页面的 66254 个元素。我正在寻找的是一种读取和下载所有页面并收集数据而不会出现任何内存问题的最佳实践。
任何建议将不胜感激
Thanks
是的,这是可能的,尽管有点棘手。
假设您的 REST 服务需要page
作为请求参数,因此,您想从页面 #1 发出请求并循环(增量page
param) 直到服务返回空结果。
因此,您可能有 REST 服务的配置,例如:
<int-http:outbound-gateway url="http://service/elements?page={page}">
<int-http:uri-variable name="page" expression="headers['page']"/>
</int-http:outbound-gateway>
注意这一点<int-http:uri-variable>
定义。从一开始你就必须将消息发送到此<int-http:outbound-gateway>
与page
标头作为1
.
您应该将此网关的回复发送至类似的地址<recipient-list-router>
, or <publish-subscribe-channel>
,其中订阅者之一仍然是您的splitter
to 将项目存储到文件夹中。
另一位订阅者有点聪明。它开始于<filter>
检查是否payload
(REST 调用的结果)为空,这意味着我们已经完成,并且服务上没有更多页面可供检索。否则你使用<header-enricher>
增加和替换page
header 并将结果发送到我们的第一个<int-http:outbound-gateway>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)