消费RabbitMQ队列,我是否真的需要声明交换机和队列?

6
在我找到的所有示例中,我看到交换机和队列在消费消息之前被声明。声明交换机似乎很奇怪,因为我正在消费一个队列,它可能绑定到多个交换机(或未绑定任何交换机,也许只是有等待的旧消息)。
此外,我想不出为什么要声明队列。这将要求我知道关于队列的信息,而这些信息在消费队列时不需要(例如auto_delete和durability)。
当我在本地测试时,我可以在不声明任何内容的情况下消费队列。它可以工作。所以我想知道,为什么我看到的每个示例都会声明交换机和队列,即使它只是消费它?
谢谢!
2个回答

5
你所看到的“所有”示例都是自包含的,并且它们试图给你提供一个可用的示例。因为如果你没有安装所有组件,你的示例将失败。
至于“为什么要声明队列”,现实生活中的例子是当消费者想要消费与当前配置相关的消息时。在这种情况下,它将创建一个独占队列(没有其他人可以连接到此队列),并开始消费消息。
回到你的答案。不需要这样做。你可以预先创建交换机、绑定和队列,然后只需将名称传递给代码即可。

4

通常情况下,消费者不需要声明交换机和队列。你必须在其他地方组装“交换机/队列”拓扑结构,这就像数据库中的模式。

但总是有例外。当你需要“私有”队列(exclusive=true)进行实时处理时,消费者必须知道(通过配置)源交换机,并将自己的队列绑定到它上面。

在其他情况下,我可以想象出一些场景,发布者声明交换机,而消费者可以使用某些约定(模式)来发现它的交换机名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接