Spring Integration-用于执行下游通道并行处理的入站通道适配器



我正在尝试在注释中配置以下工作流

具有轮询器(cron触发器(的入站通道适配器计划每30分钟运行一次轮询文件表单目录,即10个文件,然后移动到阶段目录对于每个文件,需要并行调用一个批处理作业,即10个作业应与轮询的不同文件并行运行

我能够实现一切,但无法配置下游执行器通道来并行运行作业。

以下是参考实现。每件事都在起作用,即作业是在一个文件后启动的,但它需要并行启动不同文件的作业感谢您在此上提供的任何帮助

@InboundChannelAdapter (incoming channel, custompoller) 
public MessageSource<File> pollFile ( Directory Scanner)  {
} 
public PollerMetadata custompoller(errorhandler) {
poller.trigger(cron for every 10 minutes)
}
@ServiceActivator(incoming channel)
public MessageHandler filewritertotempdiretory() {
outputchannel(tempdirchannel) 
}

@ServiceActivator(inputChannel = tempdirchannel)
public MessageHandler tempdirfilehandler() {
MethodInvokingMessageHandler messageHandler =   (launcher class, "methodname");
return messageHandler;
}

Poller Metadata.  Read in some other SO that we should not put the task executor when setting poller on cron, is that  true ?  
also how can i make the messages polled (say 10 messages polled) execute in parallel i.e. add task executor in poller metadata 
@Bean
public PollerMetadata preProcessPoller(MessagePublishingErrorHandler errorHandler) {
PollerMetadata poller = new PollerMetadata();
poller.setTrigger(new CronTrigger("0/15 * * * * ?"));
poller.setMaxMessagesPerPoll(Long.valueOf(maxMessagesPerPoll));
errorHandler.setDefaultErrorChannel(errorChannel());
poller.setErrorHandler(errorHandler);
return poller;
}

您需要显示完整的PollerMetadata配置。

最好的猜测是您还没有设置maxMessagesPerPoll

默认情况下,对于入站通道适配器,maxMessagesPerPoll为1。

您可以将TaskExecutor添加到轮询器元数据中以并行运行消息,或者将incoming channel设置为ExecutorChannel

最新更新