【问题标题】:How can I keep an AMQP connection open when using Ruby-Amqp?使用 Ruby-Amqp 时如何保持 AMQP 连接打开?
【发布时间】:2012-12-12 12:09:26
【问题描述】:

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

【问题讨论】:

  • 你肯定就在这里,每次你想发送东西时打开一个连接是非常低效的。对 ruby​​ 不够熟悉,无法建议如何去做

标签: rabbitmq amqp


【解决方案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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多