我很想知道AMQP,并试图为RabbitMQ系统设计一个通知体系结构。
我想要一个主题交换(例如,NotificationsExchange),这是因为我想灵活地处理主题交换附带的路由键和队列,以及将来扩展该主题的更多选项。不过我可能错了,因为...
我还希望每个通知都由两个或多个消费者使用。作为基准,我希望发布的每个通知都在数据库中结束。另外,我希望每个通知都适合客户端应用程序使用(例如,Web应用程序使用并进一步推送套接字以立即进行用户通知,而无需数据库轮询)。
这听起来确实像是扇出局,除非我不想这样做,因为我需要更多的队列来处理各种通知(我认为-对AMQP来说还很陌生,并且想尽办法解决) 。
是否可以从同一队列中(一致地)使两个使用者得到通知?
例如:
Notif.NotifGroup.User.ThisUser通过NotificationExchangedbListener绑定到Notif.#mvcClientListener还结合Notif.#(并且进一步确定用户是否在线并经由套接字推下游)我不确定我是否在正确的轨道上。我读到“同一队列中的多个使用者以循环方式进行负载平衡”,坦率地说,我不知道这意味着什么。
是否可以有一个主题交换,其中两个使用者可以从同一队列中连续读取相同的消息(例如,相同的路由密钥),或者我必须为此使用Fanout交换吗?
谢谢。
是否可以从同一队列中(一致地)使两个使用者得到通知?
是的,但这不是您想要的。
当您在一个队列上有多个使用者时,这些使用者是循环负载平衡的。如果消费者1收到消息a,则消费者2无法收到它
相反,您要做的是为每个使用者添加其他路由处理程序,并让每个使用者创建自己的队列。
例如NotificationEx可能具有绑定Notif.#到的绑定dbQueue。相同的交换将具有Notif.#将消息推送到的绑定mvcQueue。
您的数据库使用者将从中使用,dbQueue而您的Web应用程序将从中使用mvcQueue。
这使得添加新使用者非常容易,每个使用者都有自己的队列并绑定到交换。
FWIW,对于任何给定情况,没有“正确”或“错误”交换类型。您可以使任何交换类型适用于任何情况。但是,某些交换类型使处理某些情况更加容易。
您可能想查看一下我在RabbitMQ上的电子书,以获取有关交换类型,它们通常被接受的“最佳用例”以及如何在相当有趣的场景中应用它们的更多信息:https : //leanpub.com/b/rmq-layout和模式
| 归档时间: |
|
| 查看次数: |
3086 次 |
| 最近记录: |