我想实现以下目标:
提供图像转换作为示例。我的处理实际上更复杂,但我试图通过我需要分割文件处理来获得要求,并且我需要在连接操作之后对其进行最终处理。
我有一个基本的想法是如何链接Spring XD管道(类似于shell管道)。有一个分离器和一个聚合器。我的期望是我可以将文件作为对象传递给下一个管道。
但是,二进制对象,集合和拆分/聚合操作如何在XD中一起使用?
如果您能为我提供一个有用的示例(例如,而不是为了简单而转换,则触发shell任务“cat file1 file2> outputfile”)对我非常有用。
[1] https://github.com/spring-projects/spring-xd/wiki/Processors#splitter
答案 0 :(得分:1)
它“正常”。
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中的自定义代码;其余的应该只是流定义中的配置。
<强> EDIT2:强>
你可能希望这是事件驱动的,所以也许这会更好:
http | json-to-object | splitter | http-client | processor1 | aggregator | processor2 | file
并将您的网址列表发布为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()
返回null。