0

これが私のコードです:

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

Rails amqp gemのブローカーとしてRabbitmqを使用しています。今私は呼んでいます:

ParsepdfClient.testコントローラーから。

私の理解では、私の呼び出しは1分間スリープするべきではありませんが、1分間待機して出力します

"Received a message: Hello, world!. Disconnecting..."

そして、コントローラーの残りのコードを実行します。呼び出しは非同期であるべきではありませんか? そうでない場合、どうすれば非同期にすることができますか?

つまり、出力後にコントローラーの残りのコードを実行すべきではないということです

Connected to AMQP broker. Running #{AMQP::VERSION} version of the gem...
4

1 に答える 1