Service Activator处理程序未按顺序运行

时间:2017-11-29 19:52:45

标签: java-8 spring-integration spring-integration-dsl

我无法让服务激活处理程序连续运行,它们似乎不会一个接一个地运行。在下面的代码中,fileWriterMessageHandler方法在fileUpload方法之前调用。 fileUpload需要返回的标准返回值是什么?

@Bean
public IntegrationFlow 
inboundChannelFlow(@Value("${file.poller.delay}") long delay,
@Value("${file.poller.messages}") int maxMsgsPerPoll,
TaskExecutor taskExecutor, MessageSource<File> fileSource) 
{
return IntegrationFlows.from(fileSource,
        c -> c.poller(Pollers.fixedDelay(delay)
                .taskExecutor(taskExecutor)
                .maxMessagesPerPoll(maxMsgsPerPoll)))
        .handle("AWSFileManager", "fileUpload")
        .handle(fileWriterMessageHandler())
        .channel(ApplicationConfiguration.inboundChannel)
        .get();
}

1 个答案:

答案 0 :(得分:1)

正如我在其他地方所说的那样,你应该回到书籍和参考手册。

在这里,我们应该记住,在.handle()之间存在隐式MessageChannel,第一个.handle()将执行结果发送到下一个。{/ p>

我真的怀疑他们可能会像你描述的那样以错误的方式被召唤。但是,您可能会在日志中看到某些内容,因为所有内容都是通过taskExecutor以异步模式执行的。

我不知何故相信fileWriterMessageHandler()是标准FileWritingMessageHandler。这个期望java.io.File作为请求消息的payload。因此,如果您想在自定义服务方法之后调用此方法,则应确保最后一个返回File对象而不是boolean