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