使用@InboundChannelAdapter 注释防止重复文件轮询
Prevent duplicate files polling using @InboundChannelAdapter annotaion
我在 java class 中使用 @InboundChannelAdapter
注释从目录中提取文件。
我们如何防止重复文件轮询?
要通过注释配置文件轮询过程,您应该这样做:
@Bean
@InboundChannelAdapter(value = "filesChannel", poller = @Poller(fixed-rate = "5000"))
public MessageSource<File> fileReadingMessageSource() {
FileReadingMessageSource source = new FileReadingMessageSource();
source.setDirectory(new File(INBOUND_PATH));
source.setAutoCreateDirectory(false);
source.setFilter(new AcceptOnceFileListFilter<>());
return source;
}
可以使用更简单的方法实现相同的效果 Spring Integration Java DSL:
@Bean
public IntegrationFlow fileReadingFlow() {
return IntegrationFlows
.from(s -> s.file(tmpDir.getRoot()).patternFilter("*.sitest"),
e -> e.poller(Pollers.fixedDelay(100)))
.transform(Transformers.fileToString())
.aggregate(a -> a.correlationExpression("1")
.releaseStrategy(g -> g.size() == 25))
.channel(MessageChannels.queue("fileReadingResultChannel"))
.get();
}
你的另一个问题也可以用 DSL 解决,但这绝对是单独的 SO 问题...
我在 java class 中使用 @InboundChannelAdapter
注释从目录中提取文件。
我们如何防止重复文件轮询?
要通过注释配置文件轮询过程,您应该这样做:
@Bean
@InboundChannelAdapter(value = "filesChannel", poller = @Poller(fixed-rate = "5000"))
public MessageSource<File> fileReadingMessageSource() {
FileReadingMessageSource source = new FileReadingMessageSource();
source.setDirectory(new File(INBOUND_PATH));
source.setAutoCreateDirectory(false);
source.setFilter(new AcceptOnceFileListFilter<>());
return source;
}
可以使用更简单的方法实现相同的效果 Spring Integration Java DSL:
@Bean
public IntegrationFlow fileReadingFlow() {
return IntegrationFlows
.from(s -> s.file(tmpDir.getRoot()).patternFilter("*.sitest"),
e -> e.poller(Pollers.fixedDelay(100)))
.transform(Transformers.fileToString())
.aggregate(a -> a.correlationExpression("1")
.releaseStrategy(g -> g.size() == 25))
.channel(MessageChannels.queue("fileReadingResultChannel"))
.get();
}
你的另一个问题也可以用 DSL 解决,但这绝对是单独的 SO 问题...