2015-04-01 72 views
0

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

另外,我想不出为什么我会声明一个队列。这将要求我知道关于队列的信息,我不需要知道它们的使用情况(如auto_delete和durability)。

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

谢谢!!!

回答

0

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

根据“为什么我要申报队列”。现实生活中的例子是当你的消费者想要消费与当前配置相关的消息时。在这种情况下,它将创建一个排他性(没有其他人可以连接到这个队列),并开始消费信息。

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

0

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

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

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