pika在basic_get之后确认消息

时间:2019-12-10 20:38:09

标签: python rabbitmq pika

我有一个python代码,一次使用一次来自RMQ的消息

message_count = queue_state.method.message_count
    if not queue_empty:
        message_cursor = 1
        while message_cursor <= message_count:
            method, properties, body = channel.basic_get(queue=QueueName, auto_ack=True)
            callback(channel, method, properties, body)
            message_cursor += 1

我在回调中对接收到的消息进行了很多解析,并且我得到了一个要求,而不是自动确认消息,仅在完成回调后才对其进行确认。我做了一些挖掘,发现有一种叫做basic.ack

的方法。

但是我不确定如何在代码中使用它。该示例使用

channel.basicAck(deliveryTag, false).

在哪里可以获取deliveryTag的值?我应该在哪里运行basicAck?在我的回调之后还是在回调内部?

非常感谢

1 个答案:

答案 0 :(得分:1)

交付标记在您的方法对象中可用:method.delivery_tag

在pika文档中确实不存在(据我所见), 但是Rabbitmq.com上的教程的确提供了example

def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    time.sleep( body.count('.') )
    print(" [x] Done")
    ch.basic_ack(delivery_tag = method.delivery_tag)

从引用的示例中检索的示例代码。