我们可以使用 Spring Integration 为文件配置目录轮询,例如 -
配置 2 台服务器后,轮询发生在 1 台服务器上,相应的处理在两台服务器上进行分布式处理。
另外,我们可以在运行时切换任一服务器上的轮询吗?
编辑 - 尝试配置 JBDC MetaStore 并分别运行两个实例,能够轮询和处理但间歇性地得到DeadLockLoserDataAccessException
下面的配置
@Bean
public MessageChannel fileInputChannel(){
return new DirectChannel();
}
@Bean(PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller(){
PollerMetadata pollermetadata = new PollerMetadata();
pollermetadata.setMaxMessagesPerPoll(-1);
pollermetadata.setTrigger(new PeriodicTrigger(1000));
return pollermetadata;
}
@Bean
@InBoundChannelAdapter(value = "fileInputChannel"){
FileReadingMessageSource source = new FileReadingMessageSource();
source.setDirectory("Mylocalpath");
FileSystemPersistentAcceptOnceFileListFilter acceptOnce = new FileSystemPersistentAcceptOnceFileListFilter();
ChainFileListFilter<File> chainFilter = ChainFileListFilter(".*\\.txt"));
chainFilter.addFilter(acceptOnce);
source.setFilter(chainFilter);
source.setUseWatchService(true);
source.setWatchEvents(FileReadingMessageSource.WatchEventType.CREATE,FileReadingMessageSource.WatchEventType.MODIFY);
return source;
}
@Bean
public IntegrationFlow processFileFlow(){
return IntegrationFlows.from("fileInputChannel")
.handle(service).get();
}