我有这个队列系统,我使用pika的SelectConnection来使用Rabbitmq队列,但我的任务可以处理很长时间,在这段时间Rabbitmq可以关闭连接,我的任务重新排队到Rabbitmq因为我不能确认消息。为了排除重新排队,我在处理消息之前使用确认消息传输了代码,但结果没有看到。我从这个示例中获取了代码from here
并将处理代码更改为:
def start_processing(self):
self._channel.basic_qos(prefetch_count=1)
self._channel.add_on_cancel_callback(self.on_consumer_cancelled)
self._consumer_tag = self._channel.basic_consume(self.process_message,
self._queue,
no_ack=False,
exclusive=False)
def process_message(self, unused_channel, basic_deliver, properties, body):
self._channel.basic_ack(delivery_tag=basic_deliver.delivery_tag)
self.handle_message(body)
在消息未处理之前,确认消息不起作用