使用Bunny gem处理来自队列的消息时正常关闭

时间:2012-08-01 16:57:07

标签: ruby amqp

我正在使用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

1 个答案:

答案 0 :(得分:0)

我知道这个问题是2岁了,你现在可能已经想出了什么。那就是说,我处理这个问题的方法就是放弃“我应该退出吗?”'在订阅循环结束时检查,然后让您的SIGINT陷阱切换变量。 Bunny本身非常适合清理所有AMQP连接内容,所以你真的只需要担心退出时自己的位。