rabbitmq如何同步消息?

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

我使用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之前不会将相同的消息给予其他worker?因为在我的测试中,如果我不调用basic_ack,如果我多次运行代码,消息将再次发送。rabbitmq从发送消息到得到ack是否有超时?

h5qlskok

h5qlskok1#

在我调用basic_ack之前,rabbitmq如何确保不给其他worker给予相同消息?
只向一个消费者传递消息是RabbitMQ的一个 * 核心特性 *。消息将保持未确认状态,直到消息传递到的消费者确认它,或者消息传递的通道关闭。
在我的测试中,如果我不调用basic_ack,如果我多次运行代码,消息将再次发送。
当你多次运行你的代码时,会发生以下情况:

  • RabbitMQ将消息传递给您的消费者,将其移动到未确认状态。
  • 您停止了使用者应用程序而没有调用basic_ack,这将关闭通道和连接而不确认消息。
  • RabbitMQ检测到这一点并重新将消息排队。
  • 你重新启动你的消费者,它重新传递的消息。
  • 打泡沫,冲洗,重复。

所有这些以及更多的内容都包含在RabbitMQ documentation中。

相关问题