我有一个部署在集群上的应用程序。根据环境,集群可能有 2 或 4 个 JVM。
该应用程序具有我们在所有 JVM 上部署的相同 CamelContext。因此,所有 JVM 都有相同的路由。对于 FTP 路由,这很好,因为它具有竞争力,并且只有 1 个 JVM 获取文件。
然而,在使用基于计时器的操作从数据库中获取数据时,我发现所有 JVM 都读取相同的记录集并执行相同的工作。
我想要的是,如果一条路线选择了它,其他路线就不应该尝试。
我尝试用谷歌搜索这个。但是,找不到最好的方法来做到这一点。
有没有默认的骆驼组件支持这个?
我读了聚类 and 负载均衡关于Camel文档,但没有帮助。
JGroups 和 ZooKeeper 特定于集群类型。任何帮助,将不胜感激。
首先,不同部署的 Camel 上下文将充当独立的应用程序,彼此不了解。
如果您有多个路由使用来自相同源的行为,则行为非常依赖于组件。
- 文件/FTP 和类似的文件通常具有文件锁定机制,以避免多个使用者读取同一文件。
- 消息队列(JMS/AMQP/等)内置了消息处理,除非您使用主题 - 那么每个实例都会获得一个副本。
- 数据库和其他可轮询组件可能需要您使用仅从一个节点生成的某种信号来触发轮询。
我想最后一个是你的主要问题。这可以通过多种方式来完成。它们的设置可能有点棘手,但应该可以完成工作。
- 集群式 Quartz 调度程序。通常需要共享数据库。
阅读此处如何配置驼色石英。然后您需要配置quartz.properties 和集群属性(JDBC 或其他)。那是记录在这里.
- 您可以使用以下命令运行单个路由(在部署的 Camel 实例中选择)ZooKeeper 和路由策略。然后,您可以使用该路由并在出现问题时故障转移到其他路由,或者使用该单个路由来发出触发器,使用计时器或石英来轮询可以分发到所有骆驼实例的触发器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)