AMQP 経由でメッセージを消費するために Bunny gem を使用しています。私のアプリはキュー内のメッセージをサブスクライブしています。これは、(サブスクライブ ブロックを介した) 終わりのないブロック呼び出しです。プロセスが中断されている間 (たとえば、ターミナルで ctrl+c)、正常にシャットダウンしたいと思います。それを行う適切な方法は何ですか?現在のメッセージを処理している場合は、現在のメッセージを処理してから、ブロックから飛び出してほしいと思います。
コード例:
trap("INT") do
puts "Stopping now"
Indexer.client.stop # ???
end
module Indexer
extend self
def run
client.queue('indexer.index').subscribe do |msg|
# omitted
end
end
def client
@client ||= Bunny.new.tap(&:start)
end
end
Indexer.run # runs forever