在Python消费者中使用的RabbitMQ(通过pika)可以在并发接收的消息之间具有竞争条件吗?

yftpprvb  于 2023-10-20  发布在  RabbitMQ
关注(0)|答案(1)|浏览(158)

假设我们在Python中有以下简单的RabbitMQ回调逻辑:

import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', 5672, '/', pika.PlainCredentials("user", "password")))
channel = connection.channel()

msg_count = 0

def callback(ch, method, properties, body):
    global msg_count
    msg_count += 1
    print("Received %i messages" % msg_count)

channel.basic_consume(queue="my_queue", on_message_callback=callback, auto_ack=True)

如果一个生产者几乎同时发送两条消息,是否有可能由于竞争条件而打印两次“Received 1 messages”?
我只是不确定这些回调是如何运行的--它们是并发运行的吗?在一个线程?其他方法?

siv3szwd

siv3szwd1#

如果一个生产者几乎同时发送两条消息,是否有可能由于竞争条件而打印两次“Received 1 messages”?
Pika在内部运行I/O循环,事件在准备就绪时按顺序处理。

相关问题