是否可以使用我的 Rails 应用程序启动 AMQP 订阅者?可能通过初始化程序或其他方式。
我想让它同时运行,也可以与 Rails 模型交互。下面是我的意思的伪代码示例。
queue.subscribe do |msg,body|
Foo.create(....)
end
是否可以使用我的 Rails 应用程序启动 AMQP 订阅者?可能通过初始化程序或其他方式。
我想让它同时运行,也可以与 Rails 模型交互。下面是我的意思的伪代码示例。
queue.subscribe do |msg,body|
Foo.create(....)
end
我通常通过一个单独的消息传递守护进程来执行此操作,该守护进程加载 rails 环境。
所以一个非常简单的例子在 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、eventmachine
然后在您的应用程序旁边手动运行它:
RAILS_ENV=development script/myapp_daemon.rb run
或者从您的应用初始化程序之一启动它:
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
希望有帮助