Rabbitmq 使用Ruby AMQP时,如何保持AMQP连接打开?

Rabbitmq 使用Ruby AMQP时,如何保持AMQP连接打开?,rabbitmq,amqp,Rabbitmq,Amqp,我正在使用RabbitMQ和Rails。当控制器收到消息时,我执行以下操作: 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")

我正在使用RabbitMQ和Rails。当控制器收到消息时,我执行以下操作:

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
  • 有没有办法保持AMQP连接打开,这样我就不必每次收到请求时都调用
    start

  • 我假设打开到Rabbit MQ的连接效率很低,但是我还没有找到将代码块传递给持久连接的方法。

    如果您只想保持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
    

    不要忘记在你发送信息后删除频道。

    你肯定就在这里,每次你想发送信息时打开一个连接是非常低效的。不过,我对ruby还不太熟悉,无法建议如何使用它