我正在使用Spring Integration并且有一个包含子项集合的大型XML文件,我想将文件拆分成一组消息,每条消息的有效负载将是一个子XML片段。
使用拆分器是显而易见的,但这需要返回一组消息,这将耗尽内存;我需要将文件拆分为单独的消息,但是一次处理一个(或者更可能使用多线程任务执行程序)。
有没有一种标准的方法可以在不编写以编程方式将子消息写入通道的自定义组件的情况下执行此操作。
答案 0 :(得分:1)
我一直在寻找类似的解决方案,我还没有找到任何标准的方法。 如果有人需要实现这种行为,这是一个相当脏的修复:
<int:splitter input-channel="rawChannel" output-channel="splitChannel" id="splitter" > <bean class="com.a.b.c.MYSplitter" /> </int:splitter>
MessageChannel xsltChannel = (MessageChannel) applicationContext.getBean("splitChannel"); Message<String> message = new GenericMessage<String>(payload)); splitChannel.send(message);
答案 1 :(得分:1)
对于遇到这个非常古老的问题的人。分割器现在可以处理Iterable
,Iterator
,Stream
和Flux
(项目反应堆)类型的结果。如果返回任何这些类型,则一次一个地发出消息。
Iterator/Iterable
;自5.0.0以来Stream/Flux
。
自4.1.2以来,现在还有一个FileSplitter
emits file contents a line-at-a-time来自Interator
。