兔子mq如何同步消息?



我使用这个简单的代码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消息将再次发送 如果我多次运行代码。

当您多次运行代码时,将发生以下情况:

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

所有这些以及更多内容都在 RabbitMQ 文档中进行了介绍。


注意:RabbitMQ 团队监控rabbitmq-users邮件列表,并且只偶尔回答 StackOverflow 上的问题。

最新更新