假设我们在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”?
我只是不确定这些回调是如何运行的--它们是并发运行的吗?在一个线程?其他方法?
1条答案
按热度按时间siv3szwd1#
如果一个生产者几乎同时发送两条消息,是否有可能由于竞争条件而打印两次“Received 1 messages”?
Pika在内部运行I/O循环,事件在准备就绪时按顺序处理。