【发布时间】:2021-08-03 18:50:21
【问题描述】:
我正在尝试理解 RabbitMQ。这似乎超级混乱。
我有 1 次直接类型的交换。它绑定到 2 个队列。我没有路由键。如果我发布一条消息,它会进入两个队列。
这种行为与 Fanout 有何不同?还是 Direct 是 Fanout 的子集?
【问题讨论】:
标签: rabbitmq
我正在尝试理解 RabbitMQ。这似乎超级混乱。
我有 1 次直接类型的交换。它绑定到 2 个队列。我没有路由键。如果我发布一条消息,它会进入两个队列。
这种行为与 Fanout 有何不同?还是 Direct 是 Fanout 的子集?
【问题讨论】:
标签: rabbitmq
这里没有任何代码,就不可能准确地知道你在做什么,所以我在网上筛选了文档,发现了一些可能有用的东西。直接队列上的This tutorial 似乎表明fanout 队列只是一个direct 队列,其中所有绑定键都被忽略。
绑定键的含义取决于交换类型。我们之前使用的扇出交换只是忽略了它的价值。
它随后指出,如果您想要这样做,路由键的存在将有助于与绑定键匹配。
我们将改为使用直接交换。直接交换背后的路由算法很简单——消息进入绑定键与消息的路由键完全匹配的队列。
然后进一步规定,如果需要,您可以使 direct 队列像 fanout 队列一样工作。
使用相同的绑定键绑定多个队列是完全合法的。在我们的示例中,我们可以在 X 和 Q1 之间使用绑定键 black 添加绑定。在这种情况下,直接交换的行为类似于扇出并将消息广播到所有匹配的队列。带有路由键 black 的消息将同时发送到 Q1 和 Q2。
也许这就是你的情况?随意阅读本教程以更好地处理 direct 队列和上一篇(链接在本教程顶部)以了解更多关于 fanout 队列的信息。
【讨论】: