может быть, вы можете зарегистрировать потребителя (как показано здесь в официальном документе) без предоставления брокеру подтверждения : no_ack=True
channel.basic_consume(callback, queue='hello', no_ack=True)
Таким образом, ваш потребитель получает содержимое сообщения, но само сообщение не помечается как доставлено брокером (и возвращается в состояние Ready
при выходе из него).
Может быть, этоне самый чистый способ сделать то, что вам нужно, но он работает, и он прост.
Другой (но похожий) подход, который вы можете использовать, основан на так называемом pull API (в противоположность push API , который вы используете при регистрации абонента );Я использовал этот подход в приложении .Net: вы можете найти документацию .Net здесь , и я думаю, что API-интерфейсы Python в этом тоже похожи.
Основная идея - получить сообщениебез подтверждения: channel.BasicGet(queueName, noAck)
Я надеюсь, что это поможет вам перейти к полному и надежному решению!