它“正常工作”。
XD 在幕后使用Spring Integration;请参阅其有关拆分器/聚合器的文档。
Spring Integration 消息具有标头和有效负载;框架对有效载荷一无所知;它可以是你想要的任何东西。大概您将从一个 URL 列表开始,拆分它们,调用 http 来获取每个 URL 的 PNG 内容。调用一些服务进行转换并将结果发送到聚合器。
拆分器在每条消息上设置标题 ( correlationId
, sequenceSize
, )。sequenceNumber
下游(默认)聚合器使用这些标头重新组装结果(默认发布策略是聚合组大小与sequenceSize
标头匹配)。在您的情况下,结果将是Collection
图像;聚合器之后的最终自定义处理器可以将该列表转换为您的最终马赛克。
编辑:
source | splitter | http-client | processor1 | aggregator | processor2 | file
在哪里:
source - generates list of URLs
http-client - fetches the PNGs (binary payloads)
processor1 - convert to JPG
processor2 - create mosaic
您需要在源代码、处理器1 和处理器2 中自定义代码;其余的应该只是流定义中的配置。
编辑2:
您可能希望这是事件驱动的,所以也许这样会更好:
http | json-to-object | splitter | http-client | processor1 | aggregator | processor2 | file
并将您的 URL 列表发布为 JSON。
如果您确实想要轮询源,则类似于触发源的自定义源将起作用...
<int:inbound-channel-adapter channel="output"
auto-startup="false" ref="myPojo" method="foo">
<int:poller fixed-delay="${fixedDelay}" time-unit="SECONDS" />
</int:inbound-channel-adapter>
<bean id="myPojo" class="foo.UrlGenerator" />
foo()
如果没有要处理的内容或 URL 列表,则返回 null。