3

我在 Rails 中使用 RabbitMQ 和ruby​​-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 的连接效率很低,但是我还没有找到将代码块传递给持久连接的方法。

4

1 回答 1

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

并且不要忘记在发布消息后删除频道。

于 2012-12-12T04:09:26.283 回答