如何同步不同的Apache Camel服务器以便在没有问题的情况下协同处理文件?

时间:2017-10-23 15:13:50

标签: apache-camel

我们的设置:我们的生产是使用几个物理计算机(每台计算机运行多个JVM)的Apache Camel的多个实例(不同的JVM)。 我们的大多数Camel路由都是基于HTTP的(REST或SOAP),我们有一个网络组件处理http查询的负载平衡,因此它可以正常工作。 在文件端,共享文件夹是Linux NFS安装。每台物理计算机都安装了相同的共享文件夹。

我的问题:对于“新”模式,我们必须处理文件:有人会生成文件并将它们放在共享文件夹中,Apache Camel必须检测文件,对它们进行一些操作,然后重命名它们。 我们对该模式有两种用途,一种是处理单个文件,另一种是处理包含多个文件的文件夹。

我尝试过各种各样的东西,但我找不到一种可靠的方法来确保只有一个Apache Camel会使用该文件。

以下是我的一些尝试:

  • 使用带有readlock = markerFile选项的文件组件。据我所知,它对单个文件工作正常(可能存在我不知道的问题,单个文件没有使用太多),但是文件夹没有正常工作(我不是记住确切的问题,我在1年前停止尝试)
  • 使用计时器启动将执行此工作的java bean:
    • 我试图创建自己的锁文件,但事实证明它在NFS文件系统上不可靠。在极少数情况下,2台物理计算机都认为他们成功创建了锁文件,并处理该文件夹,当重命名操作发生时,一个JVM就会永远挂在那里
    • 我尝试使用具有主键约束的数据库来同步Camels,但是我遇到一些导致处理失败的SQL死锁异常

我没有想法,我担心没有有效的方法来同步Camels与我们的架构(并行对等体)一起工作。 有没有办法使用分布在不同Camels上的相同代码来模拟主/从架构?

0 个答案:

没有答案