gpt4 book ai didi

python - 在没有声明队列的情况下生成和使用消息

转载 作者:太空宇宙 更新时间:2023-11-03 19:13:57 26 4
gpt4 key购买 nike

当您生成消息并发送消息而不声明队列或在 basic_publish 中提及它时,消息存储在哪里(在 Rabbit 中)?我必须使用的代码看起来像这样:

... 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()

我已经在网上查看了我的能力,但没有找到答案。我有一种预感,只要这条消息没有被消耗,兔子就会创建一个队列,而且我担心,如果兔子必须声明这个队列然后销毁它几个(数千个!?),这对兔子来说会很沉重。每分钟/小时次数。

最佳答案

当您发布时,您(通常)会发布到交易所,就像您正在做的那样。交换机决定如何处理该消息。如果与该消息无关,则该消息将被丢弃。如果消息与某些内容有关,则会相应地路由它。

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

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

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

消息可以是持久的,因此,如果您将消息发送到将路由到队列的交换器,则不会读取该消息,并且重新启动 RabbitMQ 后,该消息在重新启动后仍将存在。即使消息不是持久的,如果队列不是持久的,那么它也会丢失,或者如果消息没有首先路由到队列。

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

关于python - 在没有声明队列的情况下生成和使用消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12037376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com