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

时间:2014-07-01 02:59:26

标签: apache-camel load-balancing failover

我们在一个CamelContext中定义了一些路由,其中​​包含路由中的Web服务activemq ..

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

为了向外扩展(通常我们正在为Web服务做),我在多个Jboss节点中部署了相同的CamelContext。

但实际上表现有所下降。

仅供参考:所有CamelContexts都指向相同的activemq代理。

以下是我的问题:

  1. 如何在不同的计算机上加载平衡/故障转移驼峰上下文?

  2. 如果CamelContexts部署在多个节点中,聚合是否会正常工作?

  3. 请提出你的想法!

1 个答案:

答案 0 :(得分:1)

如果没有详细了解你的系统,就无法知道为什么它会放慢速度,所以我会过去。对于你的另外两个问题:

<强>故障转移

您不会说出您想要的故障转移/负载平衡行为。不太有用的Camel文档在这里:http://camel.apache.org/clustering-and-loadbalancing.html

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

如果您需要为Web服务提供容错功能,那么您需要查看Camel以外的内容并使用类似Elastic Load Balancing的内容。 http://aws.amazon.com/elasticloadbalancing/

<强>聚合

每个Camel上下文将独立于其他上下文运行,因此一个上下文将独立于其他上下文所聚合的消息进行聚合。例如,假设您有一个聚合器,它存储来自ActiveMQ队列的消息,直到收到特殊的批处理结束消息。如果聚合器在两个不同的路由中运行,则消息将在两个路由之间分配,并且只有一个路由将接收批处理结束消息。因此,一个聚合器将坐在那里,只有一半的消息,什么都不做。另一个聚合器将包含其他消息,并将处理批处理结束消息,但不知道其他路由选择的消息。