我使用这个简单的代码使用
pika
:
conn = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = conn.channel()
def on_message(ch, method, properties, message):
print("Received message: %r" % message)
channel.basic_ack(delivery_tag=method.delivery_tag)
channel.queue_declare(queue='my_queue', durable=True)
channel.basic_qos(prefetch_count=1)
channel.basic_consume(on_message, queue='my_queue')
channel.start_consuming()
问题:
一旦我收到一条消息,并且我的
on_message
回调正在运行,rabbitmq 如何确保在我调用 basic_ack
之前不会向其他工作人员发送相同的消息?因为在我的测试中,如果我不调用basic_ack
,如果我多次运行代码,消息将再次发送。从发送消息的那一刻起,rabbitmq 是否有一些超时,直到收到 ack
?
rabbitmq 如何确保不向其他人发送相同的消息 工人,直到我调用 basic_ack ?
仅向一个消费者传递消息是 RabbitMQ 的一项核心功能。消息将保持未确认状态,直到消息发送到的消费者确认消息,或者发送消息的通道关闭。
在我的测试中,如果我不调用 basic_ack,消息将再次发送 如果我多次运行代码。
当您多次运行代码时,会发生以下情况:
basic_ack
即可停止消费者应用程序,这将关闭通道和连接而不确认消息。所有这些以及更多更多内容都包含在 RabbitMQ 文档中。