Apache camel 如何在多个服务器节点中部署相同的驼峰路由以实现负载平衡和故障转移?

Apache camel 如何在多个服务器节点中部署相同的驼峰路由以实现负载平衡和故障转移?,apache-camel,load-balancing,failover,Apache Camel,Load Balancing,Failover,我们在一个包含Web服务activemq的上下文中定义了一些路由。。在途中 最初,我们将路由部署为单个Jboss节点中的WAR 为了扩展(通常我们是针对web服务),我在多个Jboss节点中部署了相同的上下文 但性能实际上有所下降 仅供参考:所有上下文都指向相同的activemq代理 以下是我的问题: 如何在不同的机器上实现负载平衡/故障转移 如果将上下文部署在多个节点中,聚合能否正常工作 请说出你的想法 如果不详细查看您的系统,就无法知道它为什么会变慢,因此我将跳过这一部分。关于你的另外两个问

我们在一个包含Web服务activemq的上下文中定义了一些路由。。在途中

最初,我们将路由部署为单个Jboss节点中的WAR

为了扩展(通常我们是针对web服务),我在多个Jboss节点中部署了相同的上下文

但性能实际上有所下降

仅供参考:所有上下文都指向相同的activemq代理

以下是我的问题:

  • 如何在不同的机器上实现负载平衡/故障转移

  • 如果将上下文部署在多个节点中,聚合能否正常工作


  • 请说出你的想法

    如果不详细查看您的系统,就无法知道它为什么会变慢,因此我将跳过这一部分。关于你的另外两个问题:

    故障切换

    您没有说您想要什么样的故障切换/负载平衡行为。不太有用的Camel文档位于此处:

    使用Camel和ActiveMQ很容易的一种机制是部署到多个服务器并运行active-active,共享相同的ActiveMQ队列。每个路由都尝试从同一队列中读取以获取要处理的消息。只有一条路由将获得消息,因此只有一条路由处理它。其他路由可以自由读取后续消息,为您提供简单的负载平衡。如果一条路由崩溃,其他路由将继续处理消息,系统上的容量将减少

    如果您需要为您的web服务提供容错能力,那么您需要跳出驼峰,使用类似弹性负载平衡的方法

    聚合


    每个Camel上下文将独立于其他上下文运行,因此一个上下文将独立于其他上下文的用途聚合消息。例如,假设您有一个聚合器,它存储来自ActiveMQ队列的消息,直到收到一个特殊的批处理结束消息。如果聚合器在两个不同的路由中运行,则消息将在两个路由之间拆分,并且只有一个路由将接收批处理结束消息。因此,一个聚合器将处理一半的消息,而什么也不做。另一个聚合器将拥有其他消息,并将处理批处理结束消息,但不知道其他路由拾取的消息。

    如果您可以提供骆驼路由供参考,这将很有帮助您是否将WAR文件部署到JBOSS?请提供更多详细信息。是的,我将骆驼路线部署为WAR文件,仅@namphibian。您可以查看Fabric8,它提供了您想要的功能。但它现在只支持Fuse ESB,您可能无法在JBOSS.hi@matt中直接使用它,谢谢您的回复。。我面临的问题与您提到的多个上下文侦听同一activemq的聚合器完全相同。是否有解决方法?因为我们需要某种负载平衡,没有简单的解决方案。您可以运行一个聚合器,只有在第一个聚合器出现故障/崩溃时才启动第二个聚合器。但是,这会给您带来一个问题,即知道何时启动第二个聚合器。如果您希望两个聚合器同时运行,它们需要相互通信。例如,您可以尝试使用持久存储库将消息存储在数据库中。然后,任何一个聚合器都可以在需要时检索所有消息。然而,无论你做什么,它都会变得复杂。最简单的解决方案可能是重新思考聚合器在路由中的工作方式,以便系统能够处理在两个聚合器之间拆分的批次。我使用的一种技术是在超时和批处理结束消息时进行聚合。因此,当超时过期时,聚集器中挂起的任何消息都会被拾取。