gpt4 book ai didi

apache-camel - Apache Camel 中的集群 : Multiple JVMs Same CamelContext

转载 作者:行者123 更新时间:2023-12-04 23:21:16 24 4
gpt4 key购买 nike

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

最佳答案

首先,不同部署的 Camel 上下文将作为相互不了解的独立应用程序。

如果您有多个从相同来源消费的路由,则行为非常依赖于组件。

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

  • 我想最后一个是你的首要问题。它可以通过多种方式完成。它们设置起来可能有点棘手,但应该可以完成这项工作。
  • 集群 Quartz 调度器。通常需要一个要共享的数据库。
    在此处阅读如何配置 quartz in Camel .然后您需要配置quartz.properites 和集群属性(JDBC 或诸如此类)。即 documented here .
  • 您可以使用 ZooKeeper and route policies 运行单个路由(在部署的 Camel 实例中选择) .然后,您可以使用该路由并在出现问题时故障转移到另一条路由,或者使用该单个路由发出触发器,使用计时器或 quartz ,以轮询可以分发到所有 Camel 实例。
  • 关于apache-camel - Apache Camel 中的集群 : Multiple JVMs Same CamelContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26066012/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com