2012-05-30 113 views
2

我可以从另一台机器或JVM访问SEDA或VM队列吗?
我实际上想在Camel的帮助下实现负载均衡,但不希望为此引入另一个消息框架。我只是想用生产队列中的某些生产者将负载分配给不同的消费者。
这可能吗?如果没有,那么我的选择是什么?
另一种方法:(拉方法) 不确定新方法有多么优化或新方法的优点和缺点,请帮助我分析这种方法。
消息将被放入主队列中,所有工作系统都将监听主队列。比方说100,000条消息正在放入主队列中,5个工作系统正在监听它。工作人员系统将从主队列逐个处理消息。这种方法有两大好处:使用Apache Camel进行负载平衡

  1. 我不需要担心注册我的工人系统与生产者。第六个系统启动并开始监听主队列。
  2. 我不需要担心发送消息给免费的消费者系统。当工作人员系统完成处理消息时,它会从主队列中选取另一个系统。
    让我知道你的想法。

回答

2

SEDA和VM://只能在同一个JVM上工作。

Java消息传递中的负载均衡通常使用JMS和Competing Consumers pattern来实现。您发送消息到队列中,多个消费者竞争来处理它们。

如果经纪人的队列成为瓶颈 - 考虑使用扇出模式和经纪人网络。

+0

你太棒了!你建议我需要的一样! –

2

SEDA和VM端点分别对主机Context和JVM有效。为了便于JVM到JVM消息传递,您将需要使用一个over-the-wire协议组件,例如但不限于Mina,HTTP或JMS。

1

最简单的方法是使用jms。如果您有n个路由在相同的jms队列上侦听,那么它们将自动负载均衡。如果一个人消失,负载将平衡在剩余的负载上。我建议从ActiveMQ开始,因为它非常易于安装并与Camel集成得很好。要使代理高度可用,您可以设置两个独立代理或设置一个嵌入代理每个骆驼实例。

+0

我用Pull Approach更新了我的问题。 –