【问题标题】:Does RabbitMq do round-robin from the exchange to the queuesRabbitMq 是否从交换到队列进行循环
【发布时间】:2011-02-05 11:24:29
【问题描述】:

我目前正在评估消息队列系统,RabbitMq 似乎是一个不错的候选者,所以我正在深入研究它。

为了提供一点上下文,我希望有一个交换负载平衡消息发布到多个队列的东西。我不想复制消息,因此不能选择扇出交换。

另外,我考虑让多个队列与一个队列处理与消费者一起进行循环的原因是,我不希望我们的单点故障出现在队列级别。

听起来我可以在发布者端添加一些逻辑,通过编辑路由键并设置适当的绑定来模拟该行为。但这是一种被动方法,它不会考虑每个队列上消息消费的速度,如果该队列的消费者应用程序死了,可能会导致填满一个队列。

我正在从交换实体方面寻找一种更主动的方式,它会根据每个队列大小或类似性质的东西来决定将下一条消息发送到哪里。

我了解了 Alice 和可用的 RESTful API,但这似乎是一种用于实现快速路由决策的重型解决方案。

那么任何人都知道交换队列之间的循环是否可以使用 RabbitMQ?谢谢。

【问题讨论】:

  • 一旦我们在生产环境中测试了一个队列,我们​​就遇到了规模问题。单个队列是单线程的。它跟不上我们的负载。我们正在寻找循环分发的最佳实践

标签: message-queue messaging rabbitmq


【解决方案1】:

AMQP 模型中的交换通常是无状态的,尽管最近有一些有状态交换的实验,现在既有用于管理 RabbitMQ 插件的系统,也用于提供新的实验性交换类型。

没有什么可以完全满足您的要求,我不认为,尽管我不完全确定我是否理解要求。除了单点故障点之外,有一个带有工作人员读取的队列会解决您的问题吗?如果是这样,那么您的问题就归结为在允许您使用该解决方案的 HA 配置中配置 RabbitMQ。有两种方法可以做到这一点:要么使用 HALinux 和共享存储来获得具有快速故障转移的主动/被动 HA,要么设置多个并行代理并在客户端上进行重复数据删除,可能使用 redis 或类似方法。

我建议你在 rabbitmq-discuss 邮件列表中再次提问,在这里可以有更多人提供建议,并且可以将讨论存档以供后代使用。

【讨论】:

  • 感谢您的帮助。目前这是一个很好的解决方法,因为我只处于评估阶段。
【解决方案2】:

同意托尼的方法。

这里是 RabbitMQ、Redis 的“混搭”,您可以使用它来代替自己滚动 - http://xing.github.com/beetle/

【讨论】:

    【解决方案3】:

    一种内置的方式可以将表单交换共享到队列,但不完全是循环,是一致性哈希。 rabbitmq_consistent_hash_exchange

    怎么样 https://medium.com/@eranda/rabbitmq-x-consistent-hashing-with-wso2-esb-27479b8d1d21

    解释一下,它将队列按加权分布放在一个圆圈上,然后通过发送随机路由密钥将发送到最近的队列。 http://www8.org/w8-papers/2a-webserver/caching/paper2.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 2020-03-31
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多