在RabbitMQ中,哪个更昂贵,每个交换有多个队列,还是有多个交换但每个交换有更少的队列?

pvabu6sv  于 2022-12-26  发布在  RabbitMQ
关注(0)|答案(3)|浏览(220)

因此,我们决定在迁移到微服务架构的过程中使用RabbitMQ作为消息/事件总线,但我们无法找到放置队列的最佳方式的确切答案,我们有两种选择:
1.一个主交换将是扇出交换,它又将消息扇出到主队列,用于日志记录和其他目的,另一个子交换将是主题交换,并使用消息路由关键字将消息路由到每个所需的队列。我们预计子交换后面的队列数会很大。这可以通过下图来解释:

1.一个主交换,这将是一个主题交换,还有一个主队列使用“#”路由关键字绑定到该交换。该主交换还将处理到其他子交换的主路由,因此路由关键字可能是“协议.#"、“分配.#"、“消息.#",然后用于绑定多个主题子交换,每个主题子交换将处理子路由,因此,一个子交换机可能正在处理所有的“分配”,并且绑定到该交换机的队列可以由诸如“Assignment.Accepted”、“Assignment.Deleted”之类的路由关键字来绑定......在这种情况下,我们感觉每个交换机的大量队列将更少,它们将以某种方式分布在交换机之间。因此,以下哪种情况可能是最好的方法?2在RabbitMQ上运行速度更快,开销更少。
请记住,所有队列、交换和绑定都将从发布或订阅的服务动态完成。

voj3qocg

voj3qocg1#

您可以在此主题中找到一些解释:RabbitMQ Topic exchanges: 1 Exchange vs Many Exchanges
我使用RabbitMQ的方式与您在案例2中展示的方式非常相似,因为我发现了与本文中描述的相同的好处:https://skillachie.com/2014/06/27/rabbitmq-exchange-to-exchange-bindings-ampq/
交换到交换绑定在拓扑结构方面更加灵活,您可以设计拓扑结构,促进解耦并减少绑定变动
交换到交换绑定据说重量非常轻,因此有助于提高性能 *
根据我自己在交换到交换方面的经验,案例2非常好,它允许以非常快的方式创建/更改消息流拓扑。

2hh7jdfx

2hh7jdfx2#

我首先要重新总结一下我认为是你的问题,因为我相信它埋在你的帖子的某个地方。

  • 除了一系列用于实际邮件处理的特定于工作的队列之外,还需要一个跟踪/日志记录队列。什么交换拓扑最适合此方案?*

首先,对于您的应用程序,这两种选择都没有多大意义。选择1将创建一个交换,无论如何,该交换都将向绑定到它的每个队列发布消息。这显然不是您想要的。选择2将为您提供一个相当复杂的路由拓扑,其优点尚不清楚。缺点是维护起来很痛苦,学习曲线也很陡峭(你能做某事并不意味着你应该做)。

应该怎么做

在RabbitMQ中,是队列消耗了代理的资源,交换只是连接队列和发布者,交换是达到目的的手段,而队列本身就是目的。
相反,我认为您应该建立一个单个主题交换。将您的跟踪队列绑定到路由键#,以便接收所有消息。然后,适当地绑定您的工作队列,以便它们只接收需要流入它们的消息。例如,通常按消息类型路由消息。其中每个队列只保存一种类型的消息。这既简单又有效。
单个主题交换的优势在于,根据所使用的绑定密钥,您可以同时获得 Direct ExchangeFanout Exchange 的优势。此外,配置更改很容易实现,并且通常可以在根本不中断任何系统处理的情况下完成(假设您希望停止跟踪某些消息--这可以使用主题交换轻松完成,前提是您的路由键是合理的)。

vojdkbi0

vojdkbi03#

交换到交换绑定在语义上与交换到队列绑定相同。
https://www.rabbitmq.com/e2e.html

相关问题