在我们迁移到微服务架构时,我们决定使用RabbitMQ作为消息/事件总线,但我们找不到一个明确的答案来确定放置队列的最佳方式,我们有两个选择:
1. 一个主要的交换机,它将是一个扇出交换机,其将消息扇出到主队列以进行日志记录和其他用途,另一个子交换机将是一个主题交换机,并使用消息路由键将消息路由到每个所需的队列中。我们预期在子交换机后面的队列数量会比较大。这可以通过此图表解释:
2. 一个主要的交换机,它将是一个主题交换机,仍然有一个主队列使用“#”路由键绑定到该交换机。该主交换机也将处理其他子交换机的主要路由,因此路由键可能是“agreements.#”,“assignments.#”,“messages.#”,然后用于绑定多个主题子交换机,每个子交换机将处理子路由,因此一个子交换机可能处理所有“assignments”,而与该交换机绑定的队列可以通过类似“assignments.accepted”,“assignments.deleted”等路由键进行绑定。在这种情况下,我们感觉队列的数量会更少,它们会在交换机之间分布。
因此,这些方案中哪一个可能是最佳方法?在RabbitMQ上更快,开销更小。需要注意的是,所有队列、交换机和绑定都将在发布或订阅的服务中即时完成。
1. 一个主要的交换机,它将是一个扇出交换机,其将消息扇出到主队列以进行日志记录和其他用途,另一个子交换机将是一个主题交换机,并使用消息路由键将消息路由到每个所需的队列中。我们预期在子交换机后面的队列数量会比较大。这可以通过此图表解释:
![First Option](https://istack.dev59.com/0EpJJ.webp)
![enter image description here](https://istack.dev59.com/Ambt1.webp)