我们在单个 CamelContext 中定义了一些路由,其中在路由中包含 Web 服务、activemq..
最初我们将路由作为 WAR 部署在单个 Jboss 节点中。
为了横向扩展(通常我们是为 Web 服务做的),我在多个 Jboss 节点中部署了相同的 CamelContext。
但实际上性能下降了。
仅供引用:所有 CamelContext 都指向相同的 activemq 代理。
这是我的问题:
如何在不同机器上负载平衡/故障转移 camel 上下文?
如果 CamelContexts 部署在多个节点上,聚合会正常工作吗?
请说出你的想法!
最佳答案
如果不详细查看您的系统,就无法知道它为什么变慢,所以我将忽略它。对于你的另外两个问题:
故障转移
你没有说你想要什么样的故障转移/负载平衡行为。不是很有用的 Camel 文档在这里:http://camel.apache.org/clustering-and-loadbalancing.html .
一种可以轻松与 Camel 和 ActiveMQ 配合使用的机制是部署到多个服务器并运行主动-主动模式,共享相同的 ActiveMQ 队列。每个路由都尝试从同一个队列中读取以获取要处理的消息。只有一条路线会收到消息,因此只有一条路线会处理它。其他路由可以自由读取后续消息,为您提供简单的负载均衡。如果一个路由崩溃,其他路由将继续处理消息,只会降低您系统的容量。
如果您需要为您的网络服务提供容错能力,那么您需要在 Camel 之外寻找并使用类似 Elastic Load Balancing 的东西。 http://aws.amazon.com/elasticloadbalancing/
聚合
每个 Camel 上下文将独立于其他上下文运行,因此一个上下文将独立于其他上下文的内容聚合消息。例如,假设您有一个聚合器存储来自 ActiveMQ 队列的消息,直到收到特殊的批处理结束消息。如果聚合器在两个不同的路由中运行,则消息将在两个路由之间拆分,并且只有一个路由会收到批处理结束消息。因此,一个聚合器将坐在那里处理一半的消息,什么也不做。另一个聚合器将拥有其他消息并将处理批处理结束消息,但不知道其他路由拾取的消息。
关于apache-camel - 如何在多个服务器节点中部署相同的 Camel 路由以实现负载平衡和故障转移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501885/