Rabbitmq 使用Ruby AMQP时,如何保持AMQP连接打开?
我正在使用RabbitMQ和Rails。当控制器收到消息时,我执行以下操作: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")
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
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还不太熟悉,无法建议如何使用它