Techioz Blog

ルビーバニーはwait_for_confirmを交換するか死ぬか

概要

公開確認に Bunny gem を利用しながら、RabbitMQ の channel.waitForconfirmsOrDie() メソッドに似たものを組み込む最善の方法は何でしょうか?

現在、私は以下を使用しています:

if [email protected]_publisher_confirmations?
    @channel.confirm_select
end

@channel.default_exchange.publish(args)

was_successful = @channel.wait_for_confirms()

しかし、理想的には、必要なシナリオでは、確認を待つタイムアウトをもっと短くしたいと考えています。現時点では、デフォルトのタイムアウトは約 15 秒であるようですが、スレッドをブロックするには長すぎます。たとえば 3 秒以内に確認を受け取らなかった場合、例外を発生させて false を返すようにしたいのです。

RabbitMQ のドキュメントには waitForconfirmsOrDie() があるのを見ましたが、Bunny にはこれが使用可能なメソッドとしてありません。

同様の機能のためにいくつかのメソッドを書き直すことを検討していますか。誰かが同様のものに遭遇し、これを実装する良い方法を見つけた人はいますか?

解決策

同期的に確認を待たないでください。未処理の確認を追跡し、それらを処理するには、これと同様の手法を使用する必要があります。