代码之家  ›  专栏  ›  技术社区  ›  Dave Sag

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

  •  1
  • Dave Sag  · 技术社区  · 6 年前

    我使用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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Giri Chintala    6 年前

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

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

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