当前位置: 首页 > 知识库问答 >
问题:

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

葛永丰
2023-03-14

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

共有1个答案

刘曾琪
2023-03-14

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

如果您有多条路由使用相同的源,则该行为非常依赖于组件。

  • 文件/FTP和类似文件通常具有文件锁定机制,以避免多个使用者读取同一文件。
  • 消息队列(JMS/AMQP/ETC)内置了消息处理功能,除非您使用的是主题--那么每个实例都将获得一个副本。
  • 数据库和其他可轮询组件可能需要您使用仅从一个节点生成的某种信号来触发轮询。
  • 群集Quartz调度程序。通常需要共享的数据库。在这里阅读如何在骆驼中配置石英。然后需要配置quartz.properites和集群属性(JDBC或其他)。这是在这里记录的。
  • 您可以使用ZooKeeper和路由策略运行单个路由(在部署的Camel实例中选择)。然后,您可以使用该路由并在出现问题时故障转移到其他路由,或者使用该路由发出触发器(使用timer或quartz)来轮询,这些触发器可以分发到所有camel实例。
 类似资料:
  • 我试图找到这个问题的答案,但在kubernetes文档或任何问答论坛中都找不到。 我有一个运行有4个节点的kubernetes集群。是否可以创建第二个集群,重用前一个集群中的一个或多个节点?或者一个节点被限制在单个kubernetes集群中? 我正在使用RKE(用于部署k8集群的牧场工具)运行实际的集群,我发现这个问题让我怀疑这种可能性。 感谢您的澄清。

  • 这个应用程序的每个JVM应该使用相同的数据库吗?否则跟踪令牌不会在同一个应用程序中“共享”? 如何在运行传奇的相同应用程序中拆分事件?一个saga类型或saga实例是否总是在同一个应用程序上处理(直到它被关闭,所以另一个实例负责它)? 还是每个JVM都接收事件,并且每个相同类型的传奇都将运行?(并导致发送重复命令和错误) 等。还有很多问题。

  • 我想将配置文件中的多个Cassandraendpoint提供给我的Java应用程序。 例如:cassandra主机:“主机1,主机2” 我尝试了< code > addContactPoints(host),但它不起作用。如果其中一个Cassandra节点关闭,我不希望我的应用程序关闭。

  • 我有一个要求,其中我的一些quartz作业应该以集群方式运行(三个节点中只有一个应该运行该作业),而一些作业应该以非集群方式运行(三个节点中的所有三个都应该运行该作业)。 2个quartz.properties一个用于群集实例,一个用于非群集实例。 群集的两个实例都将在应用程序启动时启动。 因此,在非群集排定程序下配置的作业将以排定程序名称NON_CLST_SCHE保存在jobs表中,在同一表中以

  • 这可能不是典型的设置,但由于更高的决策,我们最终在一个应用程序中有多个 kafka 集群,每个集群有多个主题,每个集群可能具有不同的序列化策略。Json/avro.avro可能与融合的架构注册表一起使用,或者使用单个对象编码。 好吧,我通过构建自己的抽象和注册中心,分析配置并手动创建大部分内容,以某种方式实现了它,但我觉得我需要在几个地方多次重复主题名称、模式注册url等内容,以便创建所有需要的b

  • 我试图针对同一个kafka和zookeeper集群装载两个kafka模式注册表实例。但谢马一家的情况越来越复杂。当运行这两个注册表时,如果我使用api“kafka schema registry”注册一个架构,它似乎是在“schema registry ui other”中创建的,而不是像预期的那样显示在“kafka schema registry ui”中。我的配置是: 不可能有两个分离的模式注