Я использую адаптер протокола twisted от pika. Когда я успешно обработал сообщение, я отправляю подтверждение RabbitMQ, используя этот вызов:
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)
Но это похоже на довольно "хакерский" способ сделать это. Я бы предпочел иметь возможность сделать что-то вроде:
d = channel.basic_ack(...)
d.addBoth(lambda x: reactor.shutdown())
Я пропустил что-то очевидное здесь? Неужели нельзя привязать обратный вызов к концу вызова подтверждения?