RabbitMQ basic_publish 是异步的吗?

Sre*_*A R 2 python rabbitmq pika

我有以下生产者代码。

message是经过一些计算得到的dict数据。我想将消息发布到队列。然后我将消息重置为空字典以进行其他一些计算。但消费者总是从队列中得到一个空的字典。我觉得消息在发布之前已重置(是异步的吗?)。如何使其同步?

message = {a big dict ...}
channel.basic_publish(exchange='',
                            routing_key='my_queue',
                            body=json.dumps(message))
message = {}
Run Code Online (Sandbox Code Playgroud)

Gab*_*ele 5

是的,channel.basic_publish是异步的,这样是正确的。

channel.basic_publish不等待插入时间,否则会很慢。

您应该更改处理消息的方式, 如果您想使其同步,则可以使用事务。

应该是这样的:

channel.tx_select
channel.basic_publish(exchange='',
                            routing_key='my_queue',
                            body=json.dumps(message))
channel.tx_commit
Run Code Online (Sandbox Code Playgroud)

注意事务可能会降低性能。

阅读此处了解更多详细信息