Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel ApacheCamel中的集群:多个JVM和相同的CamelContext_Apache Camel_Cluster Computing_Load Balancing - Fatal编程技术网

Apache camel ApacheCamel中的集群:多个JVM和相同的CamelContext

Apache camel ApacheCamel中的集群:多个JVM和相同的CamelContext,apache-camel,cluster-computing,load-balancing,Apache Camel,Cluster Computing,Load Balancing,我有一个应用程序部署在集群上。根据环境的不同,集群可能有2个或4个JVM。 应用程序具有与我们在所有JVM上部署的相同的上下文。因此,所有JVM都有相同的路由。对于FTP路由,这很好,因为它使它具有竞争力,并且只有1个JVM获得文件。 然而,当使用基于计时器的操作从数据库中获取数据时,我看到所有JVM都读取相同的记录集并执行相同的工作。 我想要的是,如果有一条线路接上了,其他线路不应该尝试。 我试着用谷歌搜索这个。然而,我找不到最好的方法来做这件事。 是否有支持此功能的默认驼峰组件? 我阅读了和

我有一个应用程序部署在集群上。根据环境的不同,集群可能有2个或4个JVM。 应用程序具有与我们在所有JVM上部署的相同的上下文。因此,所有JVM都有相同的路由。对于FTP路由,这很好,因为它使它具有竞争力,并且只有1个JVM获得文件。 然而,当使用基于计时器的操作从数据库中获取数据时,我看到所有JVM都读取相同的记录集并执行相同的工作。 我想要的是,如果有一条线路接上了,其他线路不应该尝试。 我试着用谷歌搜索这个。然而,我找不到最好的方法来做这件事。 是否有支持此功能的默认驼峰组件? 我阅读了和关于Camel的文档,但没有帮助。
JGroups和ZooKeeper是特定于集群类型的。任何帮助都将不胜感激。

首先,不同部署的Camel上下文将充当独立应用程序,彼此互不了解

如果有多条路由从同一来源使用,则该行为非常依赖于组件

  • File/FTP和类似文件通常具有文件锁定机制,以避免多个使用者读取同一文件
  • 消息队列(JMS/AMQP/etc)内置了消息处理功能,除非您使用的是主题,否则每个实例都将获得一个副本
  • 数据库和其他可轮询组件可能需要您使用仅从一个节点生成的某种信号触发轮询
我想最后一个问题是你的主要问题。这可以通过几种方法来实现。他们可能有点棘手的设置,但应该做的工作

  • 群集石英调度器。通常需要一个要共享的数据库。 在这里阅读如何配置。然后您需要配置quartz.properites和集群属性(JDBC或诸如此类)。就是
  • 您可以使用运行单个路由(在部署的Camel实例中选择)。然后,您可以使用该路由并在出现问题时故障转移到另一个路由,或者使用该单一路由发出触发器(使用计时器或石英),以轮询可分发到所有camel实例的事件

我这里有一个问题,假设我们在文件组件上以集群模式使用quartz

故障转移:实例1(JVM1)读取文件并将数据插入表中。

如果我的工作在工作中失败了怎么办?在这个场景中,Instance2(JVM2)将拾取相同的文件并插入到表中。如何告诉camel从文件中读取未处理的数据,否则将在表中创建重复条目,除非表上有约束

注意:我的文件路由配置使用并行处理true



在Camel源代码中有一个集群示例:Camel/examples/Camel example spring boot集群路由控制器