Apache Camel中的群集:多个JVM相同的CamelContext

Kab*_*ing 4 load-balancing cluster-computing apache-camel

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

Pet*_*der 8

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

如果您有多个路由从相同的源消耗,则该行为与组件有关.

  • 文件/ FTP等通常具有文件锁定机制,以避免多个消费者读取同一文件.
  • 消息队列(JMS/AMQP/etc)已内置消息处理,除非您使用主题 - 然后每个实例都将获得一个副本.
  • 数据库和其他可轮询组件可能需要您使用仅从一个节点生成的某种信号来触发轮询.

我想最后一个是你的主要问题.它可以通过几种方式完成.设置它们可能有点棘手,但应该完成这项工作.

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