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

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

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

  1. import pika
  2. connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', 5672, '/', pika.PlainCredentials("user", "password")))
  3. channel = connection.channel()
  4. msg_count = 0
  5. def callback(ch, method, properties, body):
  6. global msg_count
  7. msg_count += 1
  8. print("Received %i messages" % msg_count)
  9. channel.basic_consume(queue="my_queue", on_message_callback=callback, auto_ack=True)

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

siv3szwd

siv3szwd1#

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

相关问题