Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rabbitmq 声明每个通道上的所有队列和交换是否不好?_Rabbitmq_Message Queue_Messaging - Fatal编程技术网

Rabbitmq 声明每个通道上的所有队列和交换是否不好?

Rabbitmq 声明每个通道上的所有队列和交换是否不好?,rabbitmq,message-queue,messaging,Rabbitmq,Message Queue,Messaging,我从RabbitMQ开始,我遇到了一个架构难题。我正要构建消息使用者类,这些类声明它们从中消费和写入的队列和交换。为了避免多个使用者和生产者之间的队列配置选项和名称不匹配,我创建了一个“repository”类,该类保存队列名称和选项 然后我突然想到。。。与其让每个消费者类都包含它使用的队列列表,为什么不使用一个全局configChannel(Channel)static方法来声明我创建的每个频道的ALL队列和交换?这样,我就不必担心它们的声明顺序了。有什么坏处吗?如果不是,为什么文档中不推荐这

我从RabbitMQ开始,我遇到了一个架构难题。我正要构建消息使用者类,这些类声明它们从中消费和写入的队列和交换。为了避免多个使用者和生产者之间的队列配置选项和名称不匹配,我创建了一个“repository”类,该类保存队列名称和选项

然后我突然想到。。。与其让每个消费者类都包含它使用的队列列表,为什么不使用一个全局
configChannel(Channel)
static方法来声明我创建的每个频道的ALL队列和交换?这样,我就不必担心它们的声明顺序了。有什么坏处吗?如果不是,为什么文档中不推荐这种方法(据我所知)

编辑 我在这里找到了更多信息:

我认为期望是生产者和消费者应该声明他们直接与之互动的事物。”

通常,生产者和消费者都会申报交易所 但只有消费者才会声明并绑定队列, 因为他们知道自己希望收到哪些信息


如果我理解正确,为了避免消息在生产者仅声明其发布到的exchange时被隐藏(队列尚未声明),需要进行一些同步,以确保首先启动使用者并声明其队列。为什么要担心潜在的问题而不为每个生产者和消费者预先声明队列呢?我想有些应用程序需要动态创建队列,这是另一回事。我的论点涉及静态或永久应用程序消息队列(当它们存在时)。

事实证明,声明队列更容易ues、交换和绑定作为一个通过脚本的管理步骤。

我猜这取决于您正在谈论的队列数量。目前,大约有15个队列,其中3个是持久性的。队列不能持久化,消息持久化,队列可以持久化,它们可以自动删除。我不太清楚您要尝试的是什么在这里实现,但是提前创建队列应该没有问题。对不起,我混淆了术语。我打算编写3个持久队列(其中将包含持久消息)。我本质上是在问:为什么不在一个地方为每个通道创建整个队列和交换网络,而不是通过分段声明来冒不一致的风险?我不明白的是不一致的原因。连接到队列的过程与声明队列的过程相同。那么为什么要提前创建它呢