处理来自队列中的消息时的优雅关机宝宝宝石

问题描述:

我使用兔宝宝通过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连接相当不错,所以你真的只需要在退出时担心自己的位置。