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

时间:2015-04-01 18:16:37

标签: rabbitmq amqp rabbitmq-exchange

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

另外,我无法想到为什么要申报队列。这将要求我知道有关队列的信息,我不需要知道它消耗它(如auto_delete和耐久性)。

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

感谢!!!

2 个答案:

答案 0 :(得分:2)

"所有"你看到的例子是自包含的。他们试图给你一个有效的例子。因为如果您没有设置所有组件,您的示例将失败。

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

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

答案 1 :(得分:2)

通常,您不需要在使用者中声明交换和队列。您必须在其他地方组装“交换/队列”拓扑。这就像数据库中的模式。

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

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