处理来自队列中的消息时的优雅关机宝宝宝石
问题描述:
我使用兔宝宝通过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
答
我知道这个问题为2岁,你现在可能已经想通了什么。也就是说,我处理这个问题的方式就是放弃'我应该放弃吗?'检查你的订阅循环的结尾,然后让你的SIGINT陷阱切换变量。 Bunny本身对于清理所有AMQP连接相当不错,所以你真的只需要在退出时担心自己的位置。