2012-05-31 49 views
3

我在Rails中使用RabbitMQ和ruby-amqp。當由控制器接收到的消息我執行以下操作:如何在使用Ruby-Amqp時保持AMQP連接打開?

def create 
    AMQP.start("amqp://localhost:5672") do |connection| 
    channel = AMQP::Channel.new(connection) 
    exchange = channel.direct("") 
    exchange.publish("some msg", :routing_key => "some key") 

    EventMachine.add_timer(2) do 
     exchange.delete 
     connection.close { EventMachine.stop } 
    end 
    end 
end 
  1. 有沒有辦法讓AMQP連接打開,這樣我就不必在每次請求到來時調用start

我認爲打開與Rabbit MQ的連接效率不高,但是我還沒有找到將代碼塊傳遞給持久連接的方法。

+0

你絕對是在這裏打開一個連接,每次你想發送的東西是非常低效的。紅寶石還不夠熟悉,不過建議如何去做 – robthewolf

回答

1

如果您只想保持AMQP連接處於打開狀態,請嘗試設置全局變量以保持連接唯一。

def start_em 
    EventMachine.run do 
    $connection = AMQP.connect(CONNECTION_SETTING) unless $connection 
    yield 
    end 
end 

def publish(message, options = {}) 
    start_em { 
    channel = AMQP::Channel.new($connection)   
    exchange = channel.direct('')       
    exchange.publish(message, {:routing_key => 'rails01'}.merge(options)) 
    EventMachine.add_timer(1) { exchange.delete }   
    } 
end 

並且不要忘記在你甩掉信息後刪除頻道。

相關問題