Rails app中的AMQP订阅者

是否可以使用我的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

希望有所帮助