2

私は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関数を呼び出すと、コンソールが「クライアントプロパティの更新」と言ってそこで停止し、サーバー側のルビースクリプトを実行しますが、キューを読み取らず、プロセスを実行しません。コードの何が問題なのか理解できません。親切に助けてください。

4

0 に答える 0