RabbitMQ — 为什么我的路由键在使用主题交换时被忽略
RabbitMQ — Why are my Routing Keys being ignored when using topic exchange
我正在使用 RabbitMQ 协调 collection 服务之间的事件,如下所示:
用户管理器
- 当它希望从单独的服务收集用户数据时发出
user.collect
- 侦听由单独服务发出的
user.collected
用户收藏家
- 在应该收集一些用户数据时监听
user.collect
,并且
- 在收集数据时发出
user.collected
。
还有其他服务可以侦听
等事件
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
的交易所通信。
用户管理器创建一个生产者,该生产者将 user.collect
事件发送到与 routingKey
user.collect
的 MY_APP
交换,并创建一个在队列上侦听的消费者USER_COLLECTION
对于具有 routingKey user.collected
的事件。
用户收集器创建一个生产者,它使用 routingKey user.collected
向 MY_APP
交换发出 user.collected
事件,并创建一个监听队列 USER_COLLECTION
的消费者对于具有 routingKey user.collect
.
的事件
但是我发现用户管理器发出 user.collect
并且这是由用户管理器本身通过 user.collected
.
的侦听器接收到的
好像routingKey被忽略了。我做错了什么?
更新
见
为每个消费者创建不同的队列,并使用适当的绑定键 user.collect 或 user.collected 将队列绑定到主题交换。
- 排队将消息传递给其中一个消费者,而不是所有消费者。
- 消息根据它与 Topc 交换器的绑定键路由到队列。
查看此 link 以获得更详细的示例。 https://www.rabbitmq.com/tutorials/tutorial-five-python.html
我正在使用 RabbitMQ 协调 collection 服务之间的事件,如下所示:
用户管理器
- 当它希望从单独的服务收集用户数据时发出
user.collect
- 侦听由单独服务发出的
user.collected
用户收藏家
- 在应该收集一些用户数据时监听
user.collect
,并且 - 在收集数据时发出
user.collected
。
还有其他服务可以侦听
等事件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
的交易所通信。
用户管理器创建一个生产者,该生产者将 user.collect
事件发送到与 routingKey
user.collect
的 MY_APP
交换,并创建一个在队列上侦听的消费者USER_COLLECTION
对于具有 routingKey user.collected
的事件。
用户收集器创建一个生产者,它使用 routingKey user.collected
向 MY_APP
交换发出 user.collected
事件,并创建一个监听队列 USER_COLLECTION
的消费者对于具有 routingKey user.collect
.
但是我发现用户管理器发出 user.collect
并且这是由用户管理器本身通过 user.collected
.
好像routingKey被忽略了。我做错了什么?
更新
见
为每个消费者创建不同的队列,并使用适当的绑定键 user.collect 或 user.collected 将队列绑定到主题交换。
- 排队将消息传递给其中一个消费者,而不是所有消费者。
- 消息根据它与 Topc 交换器的绑定键路由到队列。
查看此 link 以获得更详细的示例。 https://www.rabbitmq.com/tutorials/tutorial-five-python.html