3

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 呼び出しの最後にコールバックをチェーンすることは本当に不可能ですか?

4

1 に答える 1