【问题标题】:Do I need rabbitmq bindings for direct exchange?我需要rabbitmq绑定来直接交换吗?
【发布时间】:2017-01-06 01:54:03
【问题描述】:

我有一个兔子 mq 服务器正在运行,我的所有消息都通过一个直接交换。消息被路由到各个非永久队列(它们可能会持续几个小时)。我刚开始阅读有关队列绑定到交换的内容,并且对于我是否真的需要将队列绑定到交换有点困惑。我正在使用 pika basic_publishconsume 函数,所以也许这是暗示的?不太清楚,只是想了解更多。

谢谢

【问题讨论】:

    标签: python rabbitmq rmq


    【解决方案1】:

    如果您使用直接路由的默认交换 (exchange = ''),则不必声明任何绑定。默认情况下,所有队列都绑定到默认交换器。只要路由键与队列名称完全匹配(并且队列存在),默认交换 iw

    【讨论】:

      【解决方案2】:

      总是。事实上,即使队列严格来说是消费者方的实体,它们也应该由生产者在创建交换器时声明并绑定到直接交换器。

      【讨论】:

      • 它似乎在没有绑定的情况下工作,但还没有看到任何问题。我以后会遇到什么事情吗?
      • 它归结为最佳实践。这不仅限于直接交换。
      • 假设发布者在任何消费者上线之前开始发布并声明队列并将队列绑定到该交换。在这种情况下,消息可能会被丢弃或 DLO。
      【解决方案3】:

      您必须使用某个绑定键将队列绑定到交换器,否则消息将被丢弃。

      这就是任何 amqp 代理的工作方式,发布者发布消息以与某个密钥交换,amqp 代理(RabbitMq)将此消息从交换路由到那些与给定密钥与交换绑定的队列。

      但是,在发布者中声明和绑定队列并不是强制性的。 您可以在订阅者中执行此操作,但请确保在启动发布者之前运行订阅者。

      如果您认为您的消息在没有绑定的情况下被路由到队列,那么您错过了什么。

      【讨论】: