目前我们在 JRuby 中使用 Resque,我们在开发时使用了两种启动 Worker 的方式。
- 使用耙:
QUEUE=* jruby -J-cp /path/to/library -S rake environment resque:work
- 以编程方式,通过 Sinatra Rack App(或其他)初始化,最终调用一个类:
def start
@worker = Resque::Worker.new(@queues)
@worker.verbose = @vervose
@worker.work(@interval)
end
def stop
@worker.try(:shutdown)
end
尽管这两种解决方案在我们的开发中都是可以接受的。例如,我担心这在部署到 Tomcat 时会如何工作。
通常,在 Ruby 中,您会生成或妖魔化工作人员,然后使用监视工具来监视 pid。
在部署时以编程方式启动 Worker 是否有意义?我想知道它是否会在 java 中启动一个新线程或使 jruby 进程混乱,如果我不应该使用另一个调度库(如quartz)来启动一个worker?还是在部署任务时启动的 rake 任务?
我可以创建一个 Worker 模型,然后让它跟踪数据库中的工人,但这对我来说没有意义。
任何帮助或知识将不胜感激。
谢谢你。
参考:
https://github.com/defunkt/resque
http://rubydoc.info/github/defunkt/resque/master/Resque/
http://blog.thomasmango.com/post/636319317/resque-in-production