我正在使用txamqp python库连接到AMQP代理(RabbitMQ),我有一个使用以下回调的消费者:
@defer.inlineCallbacks
def message_callback(self, message, queue, chan):
"""This callback is a queue listener
it is called whenever a message was consumed from queue
c.f. test_amqp.ConsumeTestCase for use cases
"""
# The callback should be redefined here to keep getting further messages from queue
queue.get().addCallback(self.message_callback, queue, chan).addErrback(self.message_errback)
print " [x] Received a valid message: [%r]" % (message.content.body,)
yield self.smpp.sendDataRequest(SubmitSmPDU)
# ACK the message in queue, this will remove it from the queue
chan.basic_ack(message.delivery_tag)
当“确认”消息时,它将从队列中删除(确认?),但是当消息不是“ack”时会发生什么?我需要一个“重试”机制,我可以推迟稍后再次回调的消息,并跟踪它需要多少重试。
我如何列出/删除队列中的消息?
答案 0 :(得分:1)
RabbitMQ有一个很好的management plugin,但是它甚至不允许删除队列中的消息。
您基本上必须编写自己的应用程序,或找出these 3rd party management applications中哪些可以删除消息。
答案 1 :(得分:0)
已经解决,为了从队列中重试消息,有必要拒绝带有'retry'标志的消息,它将被排队回队列。
如果我用计时器拒绝它(callLater in twisted),那么排队的消息将被推迟到我想要的任何时间。