[英]Apache Camel ftp: with idempotent repository, repository value not removed
我有一个使用 Apache Camel 3 ftp 组件的 Spring Boot 2.5 应用程序。
该路由从 ftp 服务器读取并将文件写入本地文件系统。
将运行多个应用程序实例,因此需要文件锁定。 我正在使用 Redis 幂等存储库(RedisIdempotentRepository)。
我正在用 400 个文件测试锁的稳健性。
路线如下,密钥为 arguments。
from("ftp://" + ftpHost +
"/" + ftpRootDirectory +
"&localWorkDirectory=" + declarationRootDirectory +
"&delay=5s" +
"&readLock=idempotent" +
"&recursive=true&binary=true&delete=true" +
"&idempotent=true&shuffle=true" +
"&readLockRemoveOnCommit=true" +
"&idempotentRepository=#ftdFtpIdempotentRepository"
.to("file://" + declarationRootDirectory);
使用上述方法,文件名被添加到存储库中,但在处理文件后不会被删除。 以下参数似乎不起作用。 'readLockRemoveOnCommit=true'
如果未删除密钥,则不会处理 ftp 服务器上的另一个同名文件。 我真的不想把它留给驱逐政策。 我假设 ftp 组件应该从存储库中删除条目。
有人可以指出为什么没有删除回购条目吗?
查看源代码似乎只有 InProgressRepository 会删除 repo 条目。 这在 Camel 文档中没有说明。
我已经尝试过了,它有效。 但经过几次测试迭代后,路由最终无法处理文件。 我不确定这是否是一个错误,但无法处理文件是不可接受的。
结合使用“idempotentRepository”和“inProgressRepository”也可以。 我注意到 ftp 组件将尝试添加回购条目两次。 但总的来说,它可以满足我的需要,而且看起来很健壮。
根据文档camel-ftp 默认情况下不会删除使用的文件。 由于从idempotentRepository
中删除条目会导致 ftp 消费者端点一遍又一遍地处理文件,这正是 idempotentRepository 试图通过保留条目来防止的。
解决方法:
delete=true
或move=.done
删除或移动文件到 hidden.done 目录
move=/somepath/processed/${file:name}
recursive=true
,请务必将其放在 ftp 组件轮询新文件的文件夹之外。readLock=idempotent
设置出现问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.