2012-08-01 64 views
3

我使用兔寶寶通過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 

回答

0

我知道這個問題爲2歲,你現在可能已經想通了什麼。也就是說,我處理這個問題的方式就是放棄'我應該放棄嗎?'檢查你的訂閱循環的結尾,然後讓你的SIGINT陷阱切換變量。 Bunny本身對於清理所有AMQP連接相當不錯,所以你真的只需要在退出時擔心自己的位置。