spring - InboundChannelAdapter 多次从 s3 获取同一个文件
问题描述
我有InboundChannelAdapter配置了S3StreamingMessageSource。我强迫Poller使用只有 1 个线程的taskExecutor 。但我看到同一个文件被同一个线程以 3-4 秒的间隔拾取 3 次。即使轮询间隔是 10 秒。我指定了由模式过滤器和接受过滤器组成的复合过滤器。但没有结果,文件总是被拾取 3 次。
String prefix = "some_prefix";
String channel = "some_channel"
Pattern filePattern = Pattern.compile(
"^" + prefix + "some_file_name_pattern");
@Bean
@InboundChannelAdapter(value = channel,
poller = @Poller(fixedDelay = "10000", taskExecutor = "threadPoolTaskExecutor"))
public MessageSource<InputStream> createS3InboundStreamingMessageSource() {
S3StreamingMessageSource messageSource = new S3StreamingMessageSource(template());
messageSource.setRemoteDirectory(bucketName);
CompositeFileListFilter<S3ObjectSummary> compositeFileListFilter = new ChainFileListFilter<>();
compositeFileListFilter.addFilter(new S3PersistentAcceptOnceFileListFilter(
new SimpleMetadataStore(), prefix));
compositeFileListFilter.addFilter(new S3RegexPatternFileListFilter(filePattern));
messageSource.setFilter(compositeFileListFilter);
return messageSource;
}
@Transformer(inputChannel = channel,"another_channel")
public Message<S3ObjectInputStream> enrich(Message<S3ObjectInputStream> s3ObjectInputStreamMessage) {
S3ObjectInputStream s3ObjectInputStream = s3ObjectInputStreamMessage.getPayload();
URI zipUri = s3ObjectInputStream.getHttpRequest().getURI();
LOGGER.info("Picking up file : {}", zipUri.getPath());
...
}
private S3RemoteFileTemplate template() {
S3SessionFactory sessionFactory = new S3SessionFactory(amazonS3);
return new S3RemoteFileTemplate(sessionFactory);
}
@Bean
public TaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setMaxPoolSize(1);
executor.setThreadNamePrefix("single_thread_task_executor");
executor.initialize();
return executor;
}
我看到该应用程序来到@Transformer 3 次。非常感谢任何帮助。
解决方案
推荐阅读
- c# - 在 xunit 中为不同的程序模式重新运行测试组
- html - 使用 + 选择器在另一个元素中以不同的方式设置相同的类
- reactjs - 在 reducer 中更新状态不会传播到组件
- c# - 如何从另一个表单中隐藏按钮
- sql-server - 使用左连接/外连接连接多个表
- ruby - 使用全局变量调用函数
- jedis - redis.clients.jedis.exceptions.JedisDataException:ERR 值不是整数或超出范围
- java - 使用 spring-data-redis 将 500k 记录插入 redis
- c++ - c ++数学问题,如果数学都在同一行,则双精度数不返回值
- recursion - 得到错误 :: rest: 需要一个非空列表;给定:()在检查测试时在球拍博士中