【问题标题】:Is RabbitMQ basic_publish asynchronous?RabbitMQ basic_publish 是异步的吗?
【发布时间】:2017-12-01 12:18:00
【问题描述】:

我有以下生产者代码。

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

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

【问题讨论】:

    标签: python rabbitmq pika


    【解决方案1】:

    是的,channel.basic_publish 是异步的,这样就对了。

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

    您应该改变处理消息的方式, 但是如果你想同步,你可以使用事务。

    应该是这样的:

    channel.tx_select
    channel.basic_publish(exchange='',
                                routing_key='my_queue',
                                body=json.dumps(message))
    channel.tx_commit
    

    注意交易会降低性能。

    Read here了解更多详情

    【讨论】:

      猜你喜欢
      • 2018-08-29
      • 2018-11-06
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 2017-02-19
      • 2015-08-03
      相关资源
      最近更新 更多