当部署为WAR时,JRuby中的线程安全Resque Worker

Lui*_* R. 5 java rake tomcat jruby resque

目前我们在JRuby中使用Resque,我们在开发时使用两种方式启动Worker.

  • 使用耙子:
QUEUE=* jruby -J-cp /path/to/library -S rake environment resque:work
Run Code Online (Sandbox Code Playgroud)
  • 以编程方式,通过Sinatra Rack App(或其他)初始化,最终通过以下方式调用类:

def start
   @worker = Resque::Worker.new(@queues)
   @worker.verbose = @vervose
   @worker.work(@interval)
end

def stop
   @worker.try(:shutdown)
end
Run Code Online (Sandbox Code Playgroud)

虽然这两种解决方案都适合我们开发.我担心在部署到Tomcat时这将如何工作.

在Ruby中,通常会产生或妖魔化工作者,然后使用监视工具来监视pid.

在部署时以编程方式启动Workers是否有意义?我想知道它是否在java中启动一个新线程或者混乱了jruby进程,如果不是我应该使用,还有另一个像quartz这样的调度库来启动一个worker?或者在部署任务中启动的rake任务?

我可以创建一个Worker模型,然后跟踪数据库中的worker,但这对我没有意义.

任何帮助或知识将不胜感激.

谢谢.

参考文献:

https://github.com/defunkt/resque

http://rubydoc.info/github/defunkt/resque/master/Resque/

http://blog.thomasmango.com/post/636319317/resque-in-production

https://gist.github.com/486161

Cod*_*lan 0

使用rake resque:work将引导您的 Rails 环境并启动一个工作程序,该工作程序轮询作业,将自己分叉到一个(子)工作程序进程中,处理该作业然后退出。

如果您想运行多个工作程序,请使用该COUNT变量:

QUEUE=* COUNT=5 jruby -J-cp /path/to/library -S rake environment resque:work

这方面的哪些方面将部署到 Tomcat?这都是命令行。