我创建了一个用于处理多个文件的 Spring Batch 集成项目,并且它的工作非常出色。
在我写这个问题时,我有 四个 Pod 正在运行,但行为并不像我期望的那样,我希望同时处理 20 个文件(每个 Pod 五个) .
我的池化器设置使用以下参数:
poller-delay: 10000
max-message-per-poll: 5
我也使用 Redis 来存储文件和过滤器:
private CompositeFileListFilter<S3ObjectSummary> s3FileListFilter() {
return new CompositeFileListFilter<S3ObjectSummary>().addFilter(
new S3PersistentAcceptOnceFileListFilter(new RedisMetadataStore(redisConnectionFactory), "prefix-"))
.addFilter(new S3RegexPatternFileListFilter(".*\\.csv$"));
}
似乎每个 Pod 只处理一个文件,还有另一种奇怪的行为,比如其中一个 Pod 将所有文件注册到 Redis 中,因此其他 Pod 只能获取新文件。
最佳实践以及如何解决同时处理多个文件的问题?
答案 0 :(得分:1)
在 S3InboundFileSynchronizingMessageSource
上查看此选项:
/**
* Set the maximum number of objects the source should fetch if it is necessary to
* fetch objects. Setting the
* maxFetchSize to 0 disables remote fetching, a negative value indicates no limit.
* @param maxFetchSize the max fetch size; a negative value means unlimited.
*/
@ManagedAttribute(description = "Maximum objects to fetch")
void setMaxFetchSize(int maxFetchSize);
这是文档:https://docs.spring.io/spring-integration/docs/current/reference/html/ftp.html#ftp-max-fetch