【问题标题】:Any advantage using different Exchanges in RabbitMQ?在 RabbitMQ 中使用不同的 Exchange 有什么优势吗?
【发布时间】:2016-05-20 17:24:59
【问题描述】:

使用默认(直接)交换与为每个队列创建自定义直接交换有什么区别吗?

(default exchange) -> queue1
(default exchange) -> queue2

对比

queue1_direct_exchange -> queue1
queue2_direct_exchange -> queue2

在 RabbitMQ 仪表板中,我可以看到,如果我为每个队列使用默认交换,它的消息速率会更高,所以我想知道使用不同的交换是否会提高消息调度的性能...

提前致谢!

【问题讨论】:

  • 我在这里推测,但是当使用直接交换时,您需要检查消息是否具有正确的密钥并相应地路由它,这样您就有一些开销。但是当你使用默认交换时,它只是愚蠢的广播,因此速度更快。
  • 这与stackoverflow.com/questions/33622667/… 的副本非常接近,我宁愿只是指出我的答案,那里
  • 谢谢@DerickBailey,但我认为我的问题没有得到回答,我认为它没有重复。我的问题更多是关于性能......在性能方面通过不同的交易所分发消息是否更好?
  • 啊,抱歉 - 之前没有看到有关性能的信息...在下面添加了答案

标签: rabbitmq message-queue amqp


【解决方案1】:

使用默认的直接交换与其他交换类型相比,没有显着的性能改进。您将看到的性能差异取决于您在服务器上有多少内存、有多少队列正在接收一条消息、您是否将消息持久化到磁盘以及其他因素。

一般来说,应该避免使用默认的直接交换。这听起来很容易,但最终您的队列系统设计会倒退,消息发布者知道哪个队列应该接收消息。

这是我第一次开始使用 RabbitMQ 时犯的一个错误,它最终让我感到困惑并引发了问题。我不知道为什么我需要交换,也不知道路由密钥的目的是什么。

我在这里写了更多关于此的内容:http://derickbailey.com/2014/11/14/understanding-the-relationship-between-rabbitmq-exchanges-queues-and-bindings/

【讨论】:

  • 感谢分享,阅读愉快。但是,我不同意在订阅者中声明队列的方法,因为如果您在没有队列绑定的情况下发布到交换,那么消息就会丢失。我认为在您的类比中,这就像在没有写地址的情况下向邮局发送邮件。此外,大多数时候生产者和消费者是两个独立的进程。除非你能保证消费者首先启动(确保存在绑定到交换的队列),否则你应该在生产者中绑定队列到交换,以确保没有消息丢失。
猜你喜欢
  • 2017-03-25
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 2011-09-23
  • 2020-10-02
  • 2013-09-13
  • 2011-12-05
  • 2019-11-29
相关资源
最近更新 更多