pika のツイスト プロトコル アダプターを使用しています。メッセージを正常に処理したら、次の呼び出しを使用して、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)
しかし、それはかなり「ハッキー」な方法のようです。私は次のようなことができるようにしたいと思います:
d = channel.basic_ack(...)
d.addBoth(lambda x: reactor.shutdown())
ここで明らかな何かが欠けていますか?ack 呼び出しの最後にコールバックをチェーンすることは本当に不可能ですか?