我们在一个CamelContext中定义了一些路由,其中包含路由中的Web服务activemq ..
最初我们在单个Jboss节点中将路由部署为WAR。
为了向外扩展(通常我们正在为Web服务做),我在多个Jboss节点中部署了相同的CamelContext。
但实际上表现有所下降。
仅供参考:所有CamelContexts都指向相同的activemq代理。
以下是我的问题:
如何在不同的计算机上加载平衡/故障转移驼峰上下文?
如果CamelContexts部署在多个节点中,聚合是否会正常工作?
请提出你的想法!
答案 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队列的消息,直到收到特殊的批处理结束消息。如果聚合器在两个不同的路由中运行,则消息将在两个路由之间分配,并且只有一个路由将接收批处理结束消息。因此,一个聚合器将坐在那里,只有一半的消息,什么都不做。另一个聚合器将包含其他消息,并将处理批处理结束消息,但不知道其他路由选择的消息。