java - 仅当 N 个文件出现在 Apache Camel 的多节点设置中时才开始处理
问题描述
我使用 Apache Camel,它监视由多个节点共享的目录中的新文件。
应用程序的要求是只有当受监视目录中出现两种不同类型的文件时才开始处理:fileA 和 fileB。
如何在 Apache Camel 中保证如果 node1 拾取 fileA 那么 node2(或任何其他)不会拾取 fileB?
解决方案
如果您的目标是通过将传入文件平衡到一定(最有可能的,动态)数量的节点来并行处理传入文件,我建议重新设计管道,以便节点不会竞争新文件。
我最好的建议是以客户端生成新文件并将它们加载到一个暂存文件夹的方式解耦它,然后后台守护进程(例如 cron 调度的 bash 脚本)检查是否同时上传了 fileA 和 fileB,将它们捆绑在一起压缩,并将生成的存档移动到另一个文件夹,该文件夹由处理节点监控。因此,节点摆脱了如何以组独占方式获取文件的令人费解的工作。
但是如果您无法更改文件服务器上的任何内容,我想到的唯一解决方案是在文件夹监视操作上使用共享锁。这可以作为共享数据库中的LOCK TABLE来实现,或者通过在数据网格系统中使用分布式锁来实现,例如Hazelcast(请参阅Hazelcast 中的分布式锁)或Redis(请参阅Redis中的分布式锁)。
推荐阅读
- python-3.x - 没有找到多个包的匹配分布
- python - 为什么我不能使用这个 python 应用程序?
- symfony - Symfony - Composer 安装了 maker-bundle 并忘记了 --dev
- ios - Swift:在 ARKit 中获取人脸跟踪的 TruthDepth 相机参数
- python - 分配一个具有多个大写字母的变量
- wpf - 使用 VS 2019 在 XAML 设计器中禁用自动调整网格大小
- reactjs - 如何在一个组件中渲染来自两个 API 调用的数据?
- javascript - 重绘地图以查找地址时使用 addListener(dragend) 检索 GPS 坐标
- swift - 无法将“DataModel”类型的值分配给“String”类型?迅速
- java - 类型转换的数组索引超出范围异常