我正在使用鼠兔twisted protocol adapter。当我成功处理完消息后,我使用此调用向RabbitMQ发送确认:
channel.basic_ack(delivery_tag=delivery_tag)
basic_ack调用似乎是异步触发,但是它没有返回延迟,所以我无法添加回调或错误。我现在遇到一个小问题,因为我想等待队列中的某条消息,处理它并关闭反应堆,即
。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)
所以似乎唯一的选择是等待并希望确认已成功发送