首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成和使用没有声明队列的消息

生成和使用没有声明队列的消息
EN

Stack Overflow用户
提问于 2012-08-20 20:09:22
回答 1查看 396关注 0票数 1

在没有声明队列或在basic_publish中提及的情况下生成消息并发送消息时,消息(在and中)存储在哪里?我必须使用的代码看起来像这样:

代码语言:javascript
复制
... bunch of setup code (no queue declaring tho)...
channel.exchange_declare(exchange='name', type='direct')
channel.basic_publish(exchange='exch_name', routing_key='rkey', body='message' )
conn.close()

我在网上找过我的能力,但还没有找到答案。我有一种预感,只要这个消息不被使用,兔子就会创建一个队列,我担心的是,如果它必须声明这个队列,然后销毁几个队列,这对兔子来说将是相当繁重的(数千!?)每分钟/小时次数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-20 21:12:16

当您发布时,您(通常)发布到exchange,就像您正在做的那样。交换决定如何处理该消息。如果与该消息无关,则将其丢弃。如果与该消息有关,则相应地路由该消息。

在您的原始代码片段中,如果没有声明队列,消息将被丢弃。

正如您在评论中所说的,有一个由生产者创建的队列。这里有一些你还没有说明的选项。我会试着浏览所有的可能性。通常,您将在使用者中声明队列。但是,如果您希望确保消费者看到所有消息,则必须由生产者创建队列,并由生产者将其绑定到交换,以确保每个消息最终都在此队列中。然后,当队列被使用者使用时,它将看到所有消息。或者,您可以使用命令行或管理gui从代码外部将队列创建为非自动删除队列,也可以创建为持久队列(这将保留队列,即使您重新启动了RabbitMQ)。您仍然需要在生产者中为交换做一个声明,以便发送和接收消费者中的声明,但它们的交换和队列已经存在,您只需连接到它们即可。

队列和交换不是持久的,它们是持久的还是不持久的,这意味着它们将在重启RabbitMQ后存在。队列具有自动删除功能,因此当消费者与队列断开连接时,队列将不再存在。

消息可以是持久的,因此,如果您将消息发送到将被路由到队列的exchange,则不会读取该消息,并且RabbitMQ重新启动时,该消息在重新启动时仍将存在。即使消息不是持久的,如果队列不是持久的,那么它也会丢失,或者如果消息一开始就没有路由到队列。

确保在创建队列后,使用与消息的路由键相同的键将队列正确绑定到交换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12037376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档