在 RabbitMQ 中使用不同的交换有什么好处?

Iva*_*ado 4 message-queue amqp rabbitmq

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

(default exchange) -> queue1
(default exchange) -> queue2
Run Code Online (Sandbox Code Playgroud)

对比

queue1_direct_exchange -> queue1
queue2_direct_exchange -> queue2
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Der*_*ley 5

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

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

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

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

  • 感谢分享,读得好。然而,我不同意在订阅者中声明队列的方法,因为如果您在没有队列绑定的情况下发布到交换器,那么消息就会丢失。我认为在你的类比中,这就像向邮局发送一封没有写地址的邮件。此外,大多数时候生产者和消费者是两个独立的进程。除非你能保证消费者首先启动(以确保存在绑定到交换器的队列),那么你应该将队列绑定到生产者中的交换器以确保不会丢失消息。 (2认同)