我有built一个Spring Integration应用程序并传输了一些消息并tried将它们与聚合器一起传送。应用程序到达Aggregator
,但没有提供我想要的具体内容我不会释放该组并进入下一步。
我的问题是我的聚合器没有原始消息(来自Splitter
之前)。我的聚合器定义如下
<int:aggregator input-channel="deirBoxProcessorToAggregatorChannel"
ref="loggingAggregator" method="logAggregation"
output-channel="aggregatorToTransformer"
expire-groups-upon-completion="true"/>
其中的代码如下..
public class LoggingAggregator {
private static final Logger LOGGER = Logger.getLogger(LoggingAggregator.class);
public void logAggregation(Message<File> message) {
LOGGER.info("Have aggregated messsages. Will archive");
}
我在该方法中的信息虽然输入了,但总是null
。
<int:splitter input-channel="transformerToSplitterChannel"
ref="fileToMessageSplitter"
output-channel="shippedSplitterToRouterChannel"
method="split" apply-sequence="true"/>
<!-- Now use a router to determine which Message builder these messages are sent onto -->
<int:router input-channel="shippedSplitterToRouterChannel"
ref="shippedToTypeRouter" />
<int:transformer input-channel="deirShippedBoxToTransformerChannel"
ref="shippedBoxTransformer" method="transform" output-
channel="deirShippedTransformerToProcessorChannel"/>
<int:service-activator id="wellFormedShippedBoxProcess"
input-channel="deirShippedTransformerToProcessorChannel"
output-channel="deirBoxProcessorToAggregatorChannel"
ref="deirShippedFileProcessor" method="processBox" />
<int:service-activator id="malformedShippedBoxProcess"
input-channel="deirMalformedShippedTransformerToProcessorChannel"
output-channel="deirBoxProcessorToAggregatorChannel"
ref="deirShippedFileProcessor"
method="processMalformedBox" />
<int:aggregator input-channel="deirBoxProcessorToAggregatorChannel"
ref="loggingAggregator" method="logAggregation"
output-channel="aggregatorToTransformer"
expire-groups-upon-completion="true"/>
<int:transformer expression="headers.file_originalFile"
input-channel="aggregatorToTransformer"
output-channel="transformerToArchiver" />
<int-file:outbound-channel-adapter id="deirArchiver"
channel="transformerToArchiver"
directory="${dataexhange.springintg.refactor.archive.dir}"
delete-source-files="true"/>
该过程一直到聚合器,但似乎没有通过Transformer
或OutboundChannelAdapter
归档。
提前谢谢。
答案 0 :(得分:1)
您的LoggingAggregator
不正确。我建议你阅读Reference Manual。
您的logAggregation
方法应该是这样的:
public File logAggregation(List<String> lines) {
LOGGER.info("Have aggregated messsages. Will archive");
// Create Files from lines
return file;
}
这是聚合器的主要方法:获取对象列表并返回一个对象。
答案 1 :(得分:1)
Artem的回答是正确的。我错误地认为我返回aggregator
的对象将是由splitter
发送的类型。您可以通过调试来了解我在Artem的答案评论中实现的目标。
我确实在某个地方看到了,可能在手册中你可以实际返回一个类型,该类型可以从channel
投射到aggregator
。
根据这种理解,我实际上可以返回Object,并强制转换为所需的类型,以便在我将在aggregator
之后或作为{{1}}的一部分使用的日志对象中使用。