Py学习  »  MQ

rabbitmq–为什么在使用主题交换时忽略我的路由密钥

Dave Sag • 4 年前 • 861 次点击  

我使用rabbitmq来协调服务集合之间的事件,如下所示:

用户管理器

  • 发射 user.collect 当它希望从单独的服务收集用户数据时
  • 倾听 user.collected 由单独的服务发出

用户收集器

  • 倾听 用户.collect 当它应该收集一些用户数据时,
  • 发射 用户已收集 当它收集数据的时候。

还有其他服务可以监听

  • user.created ,
  • user.updated ,
  • user.deleted

此外,还有一些服务可以监听更一般的事件,如

  • #.created
  • user.#

等等。

所以我用的是 topic 交换。

我的设置如下

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

所有的服务都是通过 MY_APP

用户管理器创建一个生产者,该生产者发出 用户.collect 事件到 MyIAPP 与…交换 routingKey 用户.collect ,并创建一个侦听队列的使用者 USER_COLLECTION 对于具有routingkey的事件 用户已收集

用户收集器创建一个生产者,该生产者发出 用户已收集 事件到 MyIAPP 与routingkey交换 用户已收集 它创建了一个消费者来监听队列 用户集合 对于具有routingkey的事件 用户.collect

但是我发现用户管理器发出 用户.collect 这是由用户管理器自己和 用户已收集 .

好像路由密钥被忽略了。我做错什么了?

更新

follow up question

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39763
 
861 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Giri Chintala
Reply   •   1 楼
Giri Chintala    5 年前

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

  1. 将传递消息排队到它的一个使用者,而不是所有使用者。
  2. 消息根据其到topc交换的绑定密钥路由到队列。

请检查此链接以获取更详细的示例。 https://www.rabbitmq.com/tutorials/tutorial-five-python.html