这是我的路线
from("sftp://userName:password@ip:22/<my-folder>?move=.done") .routeId("my-route-1") .<processing-logic>
如何避免在多个示例中处理相同的文件?
hxzsmxv21#
Camel最近引入了一些有趣的集群功能-请参阅here。在您的特定情况下,您可以在启动目录轮询时建模一个处于领导地位的路由,从而防止其他节点拾取(相同或其他)文件。设置它非常容易,你所需要的就是根据主组件语法给单例端点加上前缀:master:namespace:delegateUri这将导致类似这样的结果:
from("master:mycluster:sftp://...") .routeId("clustered-route") .log("Clustered sftp polling !");
nfeuvbwi2#
您可以使用基于文件的幂等存储库。使用基于文件的幂等存储库我举个例子,
FileIdempotentRepository sftpIdempotentRepository = new FileIdempotentRepository(); sftpIdempotentRepository.setFileStore(new File("where to store it")); exchange.getContext().getRegistry().bind("sftpIdempotentRepository", sftpIdempotentRepository);
完成此配置后,您必须将这些参数添加到SFTP路由器。
from("sftp://userName:password@ip:22/<my-folder>?move=.done&idempotent=true&idempotentKey=${file:name}-${file:size}&idempotentRepository=#sftpIdempotentRepository") .routeId("my-route-1") .<processing-logic>
它会将从SFTP读取的文件存储在幂等文件中(文件名+文件大小),并防止再次处理同一文件。您可以根据需要更改idempotentKey值。
2条答案
按热度按时间hxzsmxv21#
Camel最近引入了一些有趣的集群功能-请参阅here。
在您的特定情况下,您可以在启动目录轮询时建模一个处于领导地位的路由,从而防止其他节点拾取(相同或其他)文件。
设置它非常容易,你所需要的就是根据主组件语法给单例端点加上前缀:master:namespace:delegateUri
这将导致类似这样的结果:
nfeuvbwi2#
您可以使用基于文件的幂等存储库。
使用基于文件的幂等存储库
我举个例子,
完成此配置后,您必须将这些参数添加到SFTP路由器。
它会将从SFTP读取的文件存储在幂等文件中(文件名+文件大小),并防止再次处理同一文件。
您可以根据需要更改idempotentKey值。