3

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

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

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

谢谢!!!

4

2 回答 2

3

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

就“我为什么要声明一个队列”而言。现实生活中的示例是当您的消费者想要使用与当前配置相关的消息时。在这种情况下,它将创建一个独占(没有其他人可以连接到此队列)并开始消费消息。

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

于 2015-04-01T22:00:28.303 回答
2

一般来说,你不需要在消费者中声明交换和队列。您必须在其他地方组装“交换/队列”拓扑。它就像数据库中的模式。

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

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

于 2015-04-02T11:22:29.610 回答