3

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

1 回答 1

0

我知道这个问题已经有 2 年了,你现在可能已经想通了。也就是说,我处理这个问题的方式是写一个“我应该退出吗?” 在您的订阅循环结束时检查,然后让您的 SIGINT 陷阱切换变量。Bunny 本身非常擅长清理所有 AMQP 连接的东西,所以你真的只需要担心自己在退出时的问题。

于 2014-07-06T15:13:35.910 回答