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

标签 apache-camel load-balancing failover

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

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

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

但实际上性能下降了。

仅供引用:所有 CamelContext 都指向相同的 activemq 代理。

这是我的问题:

  1. 如何在不同机器上负载平衡/故障转移 camel 上下文?

  2. 如果 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/

相关文章:

java - 使用 Mina 和 Java DSL 的 Camel 负载平衡示例

Java Camel FTP 上传

error-handling - Camel 交易错误

apache-camel - Apache Camel 中的partition_key 与 key 的区别

coldfusion - ColdFusion 集群和网络负载平衡有什么区别?

linux - Centos 中的 SNAT 目标选项

apache-camel - 不允许同一端点有多个消费者

signalr - SignalR (v2+) 是否适用于没有背板的粘性 session ?

java - 如何确保 java 客户端在整个 hazelcast 集群关闭的情况下继续运行 "working"

PHP 复制数据库 session 故障转移