我正在使用 Bunny gem 通过 AMQP 消费消息。我的应用程序订阅了队列中的消息,这是一个永无止境的阻塞调用(通过订阅块)。我希望它在进程中断时正常关闭(例如终端中的 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