【发布时间】:2013-08-03 14:37:05
【问题描述】:
这是我的代码:
class ParsepdfClient
#!/usr/bin/env ruby
# encoding: utf-8
require 'amqp'
require "rubygems"
require 'mq'
def self.test
EventMachine.run do
connection = AMQP.connect(:host => '127.0.0.1')
puts "Connected to AMQP broker. Running #{AMQP::VERSION} version of the gem..."
channel = AMQP::Channel.new(connection)
queue = channel.queue("amqpgem.examples.helloworld", :auto_delete => true)
exchange = channel.direct("")
queue.subscribe do |payload|
sleep(1.minutes)
puts "Received a message: #{payload}. Disconnecting..."
connection.close { EventMachine.stop }
end
exchange.publish "Hello, world!", :routing_key => queue.name
end
end
end
我使用Rabbitmq 作为带有rails amqp gem 的代理。现在我打电话给:
ParsepdfClient.test 来自控制器。
据我了解,我的通话不应该休眠一分钟,而是等待一分钟然后输出
"Received a message: Hello, world!. Disconnecting..."
然后它执行我的控制器代码的其余部分。调用不应该是异步的吗? 如果不是,我怎样才能使它异步?
我的意思是它不应该在输出后执行我的控制器的其余代码
Connected to AMQP broker. Running #{AMQP::VERSION} version of the gem...
【问题讨论】:
-
我的印象是所有异步代码都应该在
EventMachine.run块内。 -
@VictorMoroz 是:)
-
那怎么了?
EventMachine.run将在调用EventMachine.stop后终止,即按预期在 1 分钟后终止。
标签: ruby-on-rails ruby ruby-on-rails-3 rabbitmq amqp