2014-11-15 3 views
2

Я использую 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?

+0

Когда вы хотите, чтобы ответный звонок произошел? –

+0

Когда подтверждение было отправлено в RabbitMQ успешно, в основном «спасибо, что я проделал работу, которую вы попросили меня сделать, теперь я закрываю» –

+0

Включает ли протокол RabbitMQ файлы для acks? Если нет, то как вы узнаете, когда ack был отправлен в RabbitMQ успешно? –

ответ

0

Так что, кажется, единственный вариант - подождать и надеяться, что подтверждение было отправлено успешно.