【问题标题】:RabbitMQ - Direct vs FanOutRabbitMQ - 直接与扇出
【发布时间】:2021-08-03 18:50:21
【问题描述】:

我正在尝试理解 RabbitMQ。这似乎超级混乱。

我有 1 次直接类型的交换。它绑定到 2 个队列。我没有路由键。如果我发布一条消息,它会进入两个队列。

这种行为与 Fanout 有何不同?还是 Direct 是 Fanout 的子集?

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

    这里没有任何代码,就不可能准确地知道你在做什么,所以我在网上筛选了文档,发现了一些可能有用的东西。直接队列上的This tutorial 似乎表明fanout 队列只是一个direct 队列,其中所有绑定键都被忽略。

    绑定键的含义取决于交换类型。我们之前使用的扇出交换只是忽略了它的价值。

    它随后指出,如果您想要这样做,路由键的存在将有助于与绑定键匹配。

    我们将改为使用直接交换。直接交换背后的路由算法很简单——消息进入绑定键与消息的路由键完全匹配的队列。

    然后进一步规定,如果需要,您可以使 direct 队列像 fanout 队列一样工作。

    使用相同的绑定键绑定多个队列是完全合法的。在我们的示例中,我们可以在 X 和 Q1 之间使用绑定键 black 添加绑定。在这种情况下,直接交换的行为类似于扇出并将消息广播到所有匹配的队列。带有路由键 black 的消息将同时发送到 Q1 和 Q2。

    也许这就是你的情况?随意阅读本教程以更好地处理 direct 队列和上一篇(链接在本教程顶部)以了解更多关于 fanout 队列的信息。

    【讨论】: