2

我可以从另一台机器或 JVM 访问 SEDA 或 VM 队列吗?
我实际上想在 Camel 的帮助下实现负载平衡,但不想为此引入另一个消息传递框架。我只想使用一些内置队列将负载从生产者分配给不同的消费者。
是否可以?如果没有,那么我有什么选择?
另一种方法:(Pull Approach) 不确定新方法有多优化或新方法的优缺点是什么,所以请帮助我分析这种方法。
消息将被放入主队列,所有工作系统都将监听主队列。假设有 100,000 条消息被放入主队列,5 个工作系统正在监听它。工作系统会一一处理来自主队列的消息。这种方法有两个很大的好处:

  1. 我不需要担心向生产者注册我的工作系统。第六个系统刚刚启动并开始收听主队列。
  2. 我不需要担心向免费的消费者系统发送消息。当工作系统处理完一条消息时,它会从主队列中获取另一条消息。
    让我知道你对此的看法。
4

3 回答 3

2

SEDA 和 VM 端点分别对主机上下文和 JVM 有效。为了促进 JVM 到 JVM 的消息传递,您需要使用无线协议组件,例如但不限于 Mina、HTTP 或 JMS。

于 2012-05-30T20:56:28.587 回答
2

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

Java 消息传递中的负载平衡通常使用 JMS 和竞争消费者模式来实现。您将消息发送到队列,并且多个消费者竞争处理它们。

如果带有队列的代理成为瓶颈 - 考虑使用扇出模式和代理网络。

于 2012-05-31T14:04:20.273 回答
1

最简单的方法是使用jms。如果您有 n 条路由在同一个 jms 队列上侦听,那么它们将自动进行负载平衡。如果一个消失了,负载将在其余的负载上得到平衡。我建议从 ActiveMQ 开始,因为它很容易设置并且与 Camel 很好地集成。为了使代理具有高可用性,您可以设置两个独立的代理或为每个骆驼实例设置一个嵌入式代理。

于 2012-05-31T05:34:59.473 回答