问题描述
假设我们在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)
如果生产者实际上同时发送两个消息,由于竞争情况,“接收到的1条消息”是否有可能被打印两次?
我只是不确定这些回调如何运行-它们是否同时运行?在线程中?其他方式?
解决方法
如果生产者实际上同时发送两个消息,是否 由于出现“接收到的1条消息”,可能会打印两次 比赛条件?
不。 Pika在内部运行一个I / O循环,并在事件就绪时按顺序处理事件。
FWIW,我现在是Pika的主要维护者。
注意: RabbitMQ团队监视rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。