【问题标题】:How does rabbitmq sync messages?rabbitmq 是如何同步消息的?
【发布时间】:2019-06-25 05:45:08
【问题描述】:

我使用这个简单的代码使用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 是否有超时?

【问题讨论】:

    标签: python rabbitmq message-queue pika python-pika


    【解决方案1】:

    rabbitmq 如何确保不向其他人提供相同的消息 工人,直到我打电话给 basic_ack ?

    仅向一个消费者传递消息是 RabbitMQ 的核心功能。消息将保持未确认状态,直到收到消息的消费者确认,或收到消息的通道关闭。

    在我的测试中,如果我不调用 basic_ack 消息将再次发送 如果我多次运行代码。

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

    • RabbitMQ 将消息传递给您的消费者,将其移至未确认状态。
    • 您在未调用 basic_ack 的情况下停止了消费者应用程序,这会在未确认消息的情况下关闭通道和连接。
    • RabbitMQ 检测到这一点并将消息重新排入队列。
    • 您重新启动您的消费者,它会重新传递消息。
    • 起泡、冲洗、重复。

    RabbitMQ documentation 涵盖了所有这些以及更多内容。


    注意:RabbitMQ 团队会监控 rabbitmq-users mailing list 并且有时只回答 StackOverflow 上的问题。

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2013-02-03
      • 1970-01-01
      相关资源
      最近更新 更多