gpt4 book ai didi

RabbitMQ - 主题交换 - 两个或多个消费者相同的主题

转载 作者:行者123 更新时间:2023-12-02 14:42:32 25 4
gpt4 key购买 nike

我对 AMQP 很陌生,正在尝试为 RabbitMQ 系统制定通知架构。

我想要一个主题交换(NotificationsExchange,比如说),特别是因为我想要灵活地使用主题交换附带的路由键和队列,以及 future 扩展该主题的更多选项。不过我可能是错的,因为......

我还想让每个通知由两个或更多消费者使用。作为基线,我希望发布的每个通知都最终存储在数据库中。此外,我希望每个通知都有资格被客户端应用程序使用(例如,网络应用程序可以使用并进一步通过套接字推送以立即获得用户通知,而无需数据库轮询)。

这听起来确实像扇出交换情况,但我不想这样做,因为我需要更多的队列来处理各种通知(我认为 - 对 AMQP 仍然是新手,并试图解决我的问题周围)。

是否可以让两个消费者从同一个队列(一致地)收到通知?

例如:

  • 通过NotificationExchange推送Notif.NotifGroup.User.ThisUser
  • dbListener 绑定(bind)到 Notif.#
  • mvcClientListener 也绑定(bind)到 Notif.#(并进一步确定用户是否在线并通过套接字向下游推送)

我不确定我是否走在正确的道路上。我读到“同一队列的多个消费者以循环方式进行负载平衡”,坦率地说,我不知道这意味着什么。

是否可以有一个主题交换器,其中两个消费者可以一致地从同一队列读取相同的消息(例如,相同的路由键),或者我必须使用扇出交换器吗?

谢谢。

最佳答案

Is it possible to have two consumers get notified (consistently) from the same queue?

是的,但这不是你想要的。

当一个队列上有多个消费者时,消费者会进行循环负载平衡。如果消费者1收到消息a,消费者2就收不到

相反,您想要做的是为每个消费者添加额外的路由处理程序,并让每个消费者创建自己的队列。

例如,NotificationEx 可能具有推送到 dbQueueNotif.# 的绑定(bind)。同一个交换器将具有 Notif.# 的绑定(bind),它将消息推送到 mvcQueue

您的数据库使用者将从 dbQueue 消费,而您的 Web 应用将从 mvcQueue 消费。

这使得添加新的消费者变得非常容易,每个消费者都有自己的队列并绑定(bind)到交换器。

<小时/>

FWIW,对于任何给定情况,没有“正确”或“错误”的交换类型。您可以使任何交换类型适用于任何情况。但是,某些交换类型可以更轻松地处理某些情况。

您可能想查看我的 RabbitMQ 电子书,了解有关交换类型、普遍接受的“最佳用例”以及如何将它们应用到相当有趣的场景中的更多信息: https://leanpub.com/b/rmq-layout-and-patterns

关于RabbitMQ - 主题交换 - 两个或多个消费者相同的主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40813706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com