私はrabbitmqに取り組んでおり、Ruby on Railsアプリからメソッドをキューにプッシュしようとしています。サーバー側のRubyスクリプトを実行して、キューを読み取り、ペイロードで送信されるメソッドを実行しています。これが私のクライアント側のコードです。
module Rabbitesh
require 'amqp'
#debugger
def self.call_rabbits(payload,queue_name)
AMQP.start(:host => "localhost") do |connection|
channel = AMQP::Channel.new(connection)
queue = channel.queue(queue_name)
channel.default_exchange.publish(payload, :routing_key => queue.name)
#EM.add_timer(0.01) do
connection.close do
#end
end
end
end
end
これで、Rabbitmq 関数を呼び出します
Rabbitesh::call_rabbits(obj,"welcome_mail")
ここで、「welcome_mail」は queue_name です
これはサーバー側のスクリプトです
require 'rubygems'
require 'amqp'
require 'daemons'
options = { :backtrace => true, :dir => '.', :log_output => true}
Daemons.run_proc('raabbitmq_daemon',options) do
AMQP.start(:host => "localhost") do |connection|
channel = AMQP::Channel.new(connection)
queue = channel.queue("welcome_mail")
Signal.trap("INT") do
connection.close do
EM.stop { exit }
end
end
puts " [*] Waiting for messages. To exit press CTRL+C"
queue.subscribe do |body|
UserMailers.welcome_organic(body).deliver
end
end
end
問題は、私のレールアプリがrabbitmq関数を呼び出すと、コンソールが「クライアントプロパティの更新」と言ってそこで停止し、サーバー側のルビースクリプトを実行しますが、キューを読み取らず、プロセスを実行しません。コードの何が問題なのか理解できません。親切に助けてください。