首页 > 解决方案 > 仅当 N 个文件出现在 Apache Camel 的多节点设置中时才开始处理

问题描述

我使用 Apache Camel,它监视由多个节点共享的目录中的新文件。

应用程序的要求是只有当受监视目录中出现两种不同类型的文件时才开始处理:fileA 和 fileB。

如何在 Apache Camel 中保证如果 node1 拾取 fileA 那么 node2(或任何其他)不会拾取 fileB?

标签: javaapache-camel

解决方案


如果您的目标是通过将传入文件平衡到一定(最有可能的,动态)数量的节点来并行处理传入文件,我建议重新设计管道,以便节点不会竞争新文件。

我最好的建议是以客户端生成新文件并将它们加载到一个暂存文件夹的方式解耦它,然后后台守护进程(例如 cron 调度的 bash 脚本)检查是否同时上传了 fileA 和 fileB,将它们捆绑在一起压缩,并将生成的存档移动到另一个文件夹,该文件夹由处理节点监控。因此,节点摆脱了如何以组独占方式获取文件的令人费解的工作。

但是如果您无法更改文件服务器上的任何内容,我想到的唯一解决方案是在文件夹监视操作上使用共享锁。这可以作为共享数据库中的LOCK TABLE来实现,或者通过在数据网格系统中使用分布式锁来实现,例如Hazelcast(请参阅Hazelcast 中的分布式锁)或Redis(请参阅Redis中的分布式锁)。


推荐阅读