要使用 rabbitmq 队列,我真的需要声明交换器和队列吗?

To consume a rabbitmq queue, do I really need to declare the exchange and the queue?

在我在网上找到的所有示例中,我看到交换器和队列在消息被使用之前被声明。 宣布交换似乎很奇怪,因为,我为什么要这样做?我正在使用一个队列,它可能绑定到多个交换(或绑定到 none,也许它只是有旧消息在等待)。

另外,我想不出为什么要声明一个队列。这将要求我知道有关队列的信息,而我不需要知道这些信息就可以使用它(例如 auto_delete 和持久性)。

当我在本地测试时,我可以在不声明任何内容的情况下使用队列。有用。所以我想知道,为什么我在网上看到的每个示例都声明交换和队列,即使它只是使用它?

谢谢!!!

"All"您看到的示例是独立的。他们试图给你一个可行的例子。因为如果您没有设置所有组件,您的示例将失败。

相对于"why I would declare a queue"。现实生活中的例子是当您的消费者想要消费与当前配置相关的消息时。在这种情况下,它将创建一个独占的(没有其他人可以连接到该队列)并开始使用消息。

回到你的答案。不,你不需要这样做。您可以提前预先创建交换、绑定和队列,然后将名称传递给代码。

一般情况下,你不需要在consumer中声明exchange和queue。您必须在其他地方 assemble "exchanges/queues" 拓扑。这就像数据库中的模式。

但总有例外。 当你需要 "private" queue (exclusive=true) 进行实时处理时,consumer 必须知道(通过配置)source exchange 并将自己的 queue 绑定到它。

在其他情况下,我可以想象发布者声明交换并且消费者可以使用某种约定(模式)进行交换命名来发现它的情况。