Ruby 使用Bunny gem处理队列中的消息时正常关机

Ruby 使用Bunny gem处理队列中的消息时正常关机,ruby,amqp,Ruby,Amqp,我正在使用Bunny gem通过AMQP消费消息。我的应用程序订阅了队列中的消息,这是一个永不中断的阻塞呼叫(通过subscribe block)。我希望它在进程中断时优雅地关闭(例如,终端中的ctrl+c)。正确的方法是什么?我希望它处理当前的消息,如果它正在处理一个,然后跳出块 代码示例: trap("INT") do puts "Stopping now" Indexer.client.stop # ??? end module Indexer extend self

我正在使用Bunny gem通过AMQP消费消息。我的应用程序订阅了队列中的消息,这是一个永不中断的阻塞呼叫(通过subscribe block)。我希望它在进程中断时优雅地关闭(例如,终端中的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年了,你现在可能已经知道了一些事情。也就是说,我处理这个问题的方法是在subscribe循环的末尾添加一个“我应该退出吗?”复选框,然后让SIGINT trap切换变量。Bunny本身很擅长清理所有AMQP连接的东西,所以你真的只需要在退出时担心你自己的事情