Rails アプリで AMQP サブスクライバーを開始することはできますか? おそらくイニシャライザなどを介して。
Railsモデルとやり取りできると同時に実行したいと思います。以下は、私が意味することの疑似コードの例です。
queue.subscribe do |msg,body|
Foo.create(....)
end
Rails アプリで AMQP サブスクライバーを開始することはできますか? おそらくイニシャライザなどを介して。
Railsモデルとやり取りできると同時に実行したいと思います。以下は、私が意味することの疑似コードの例です。
queue.subscribe do |msg,body|
Foo.create(....)
end
私は通常、レール環境をロードする別のメッセージングデーモンを介してこれを行います。
したがって、非常に単純な例は rails_root/script/myapp_daemon.rb で次のようになります。
#!/usr/bin/env ruby
require 'rubygems'
require 'amqp'
require 'daemons'
ENV["RAILS_ENV"] ||= "development"
require File.dirname(__FILE__) + "/../config/environment"
options = { :backtrace => true, :dir => '.', :log_output => true}
Daemons.run_proc('myapp_daemon', options) do
EventMachine.run do
connection = AMQP.connect(:host => "127.0.0.1")
channel = AMQP::Channel.new(connection)
queue = channel.queue("/myapp_daemon", :durable => true)
exchange = channel.direct("")
queue.subscribe do |payload|
obj = JSON.parse(payload)
#... handle messages here, utilize your rails models
Foo.create(...)
end
end
end
また、Gemfile に必要な適切な gem が必要です: amqp、daemons、eventmachines
次に、アプリと一緒に手動で実行します。
RAILS_ENV=development script/myapp_daemon.rb run
または、アプリの初期化子の 1 つから開始します。
system('script/myapp_daemon.rb start')
amqp を掘り下げるには、以下をチェックしてください。これにより、高度な概要が得られます: http://www.rubyinside.com/why-rubyists-should-care-about-messaging-a-high-level-intro-5017。 html
これは、実際の例で非常に詳細な説明を提供します: http://rubydoc.info/github/ruby-amqp/amqp/master/file/docs/Exchanges.textile#Publishing_messages_as_immediate_
最後に、Bunny がクライアントに必要なすべてを達成するかどうかを確認します。これは簡単です: https://github.com/celldee/bunny/wiki/Using-Bunny
それが役立つことを願っています