RabbitMQ キューのメッセージを取得しています。各メッセージは、リクエストしたい URL です。現在、AMQP gem を使用してキューをサブスクライブし、EventMachine を使用しているため、em-http-request ライブラリを使用して http 要求を作成しています。ここのドキュメントによると: https://github.com/igrigorik/em-http-request/wiki/Parallel-Requests 以下は非同期の http-requests を発行します:
EventMachine.run {
http1 = EventMachine::HttpRequest.new('http://google.com/').get
http2 = EventMachine::HttpRequest.new('http://yahoo.com/').get
http1.callback { }
http2.callback { }
end
したがって、RabbitMQ キューをサブスクライブすると、次のコードが得られます。
x = 0
EventMachine.run do
connection = AMQP.connect(:host => '127.0.0.1')
channel = AMQP::Channel.new(connection)
channel.prefetch(50)
queue = channel.queue("http.requests")
exchange = channel.direct("")
queue.subscribe do |metadata, payload|
url = payload.inspect
eval "
@http#{x} = EventMachine::HttpRequest.new(url).get
@http#{x}.callback do
puts \"got a response\"
puts @http#{x}.response
end
x = x+1
"
end
end
これにより、em-http-request ドキュメントで説明されている方法と同様に、新しい変数が動的に作成され、新しい http リクエストが作成されます。しかし、リクエストが実際に非同期で行われているかどうかをテストする方法はありますか? get リクエストが発生するたびにコンソールに書き込み、応答を待たずにそれらが次々と発生するのを確認できるようにすることはできますか?