我正在使用 Spring Integration 并且有一个包含子项集合的大型 XML 文件,我想将文件拆分为一组消息,每条消息的有效负载将是一个子 XML 片段。
使用 splitter 是显而易见的,但这需要返回一组消息,这会耗尽内存;我需要将文件拆分为单独的消息,但一次处理一个(或者更可能使用多线程任务执行器)。
是否有一种标准方法可以做到这一点,而无需编写以编程方式将子消息写入通道的自定义组件。
我正在使用 Spring Integration 并且有一个包含子项集合的大型 XML 文件,我想将文件拆分为一组消息,每条消息的有效负载将是一个子 XML 片段。
使用 splitter 是显而易见的,但这需要返回一组消息,这会耗尽内存;我需要将文件拆分为单独的消息,但一次处理一个(或者更可能使用多线程任务执行器)。
是否有一种标准方法可以做到这一点,而无需编写以编程方式将子消息写入通道的自定义组件。
我一直在寻找类似的解决方案,但我还没有找到任何标准的方法。如果有人需要实现此行为,这是一个相当肮脏的修复:
<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);
对于遇到这个非常古老的问题的人。拆分器现在可以处理Iterable
、Iterator
、Stream
和Flux
(project reactor) 类型的结果。如果返回任何这些类型,则一次发出一条消息。
Iterator/Iterable
从 4.0.4 开始;Stream/Flux
从 5.0.0 开始。
从 4.1.2 开始,现在还有一个通过-一次一行地发出文件内容的功能FileSplitter
。Interator