Я использую pika's twisted protocol adapter. Когда я успешно обработал сообщение я отправить подтверждение RabbitMQ, используя этот вызов:Twisted and Pika - Как добавить обратный вызов к сообщению ack call?
channel.basic_ack(delivery_tag=delivery_tag)
basic_ack вызов, кажется, стреляя в асинхронном режиме, но это не возвращающих отложила, так что я не могу добавить функцию обратного вызова или errback. Я теперь столкнулся с небольшой проблемой, потому что я хочу ждать определенного сообщения из очереди, процесс его и выключение реактора, т.е.
channel.basic_ack(delivery_tag=delivery_tag)
reactor.stop()
Конечно реактор выключается до отправки сообщения. Я работаю вокруг этого, задерживая завершение работы
channel.basic_ack(delivery_tag=delivery_tag)
reactor.callLater(5, reactor.stop)
Но это кажется довольно «Hacky» способ сделать это. Я бы предпочел иметь возможность сделать что-то вроде:
d = channel.basic_ack(...)
d.addBoth(lambda x: reactor.shutdown())
Я пропустил что-то очевидное здесь? Действительно ли невозможно связать обратный вызов в конце вызова ack?
Когда вы хотите, чтобы ответный звонок произошел? –
Когда подтверждение было отправлено в RabbitMQ успешно, в основном «спасибо, что я проделал работу, которую вы попросили меня сделать, теперь я закрываю» –
Включает ли протокол RabbitMQ файлы для acks? Если нет, то как вы узнаете, когда ack был отправлен в RabbitMQ успешно? –