RabbitMQ — 为什么我的路由键在使用主题交换时被忽略

RabbitMQ — Why are my Routing Keys being ignored when using topic exchange

我正在使用 RabbitMQ 协调 collection 服务之间的事件,如下所示:

用户管理器

用户收藏家

还有其他服务可以侦听

等事件

此外还有监听更多一般事件的服务,例如

等等。

所以我正在使用 topic 交换。

我的设置如下

| exchange | type  | queue           | routingKey     |
| -------- | ----- | --------------- | -------------- |
| MY_APP   | topic | USER_COLLECTION | user.collect   |
| MY_APP   | topic | USER_COLLECTION | user.collected |

所有服务都与名为 MY_APP 的交易所通信。

用户管理器创建一个生产者,该生产者将 user.collect 事件发送到与 routingKey user.collectMY_APP 交换,并创建一个在队列上侦听的消费者USER_COLLECTION 对于具有 routingKey user.collected 的事件。

用户收集器创建一个生产者,它使用 routingKey user.collectedMY_APP 交换发出 user.collected 事件,并创建一个监听队列 USER_COLLECTION 的消费者对于具有 routingKey user.collect.

的事件

但是我发现用户管理器发出 user.collect 并且这是由用户管理器本身通过 user.collected.

的侦听器接收到的

好像routingKey被忽略了。我做错了什么?

更新

为每个消费者创建不同的队列,并使用适当的绑定键 user.collect 或 user.collected 将队列绑定到主题交换。

  1. 排队将消息传递给其中一个消费者,而不是所有消费者。
  2. 消息根据它与 Topc 交换器的绑定键路由到队列。

查看此 link 以获得更详细的示例。 https://www.rabbitmq.com/tutorials/tutorial-five-python.html