目前我们在JRuby中使用Resque,我们在开发时使用两种方式启动Worker。
QUEUE=* jruby -J-cp /path/to/library -S rake environment resque:work
def start
@worker = Resque::Worker.new(@queues)
@worker.verbose = @vervose
@worker.work(@interval)
end
def stop
@worker.try(:shutdown)
end
虽然这两种解决方案都适合我们开发。我担心在部署到Tomcat时这将如何工作。
在Ruby中,通常会产生或妖魔化工人,然后使用监控工具来监视工具。
部署后以编程方式启动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
答案 0 :(得分:0)
使用rake resque:work
将启动您的Rails环境并启动一个工作程序,该工作程序轮询作业,将自己分配到(子)工作进程,处理该作业然后退出。
如果您想运行多个工作人员,请使用COUNT
变量:
QUEUE=* COUNT=5 jruby -J-cp /path/to/library -S rake environment resque:work
这将部署到Tomcat的哪个方面?这是所有命令行。
答案 1 :(得分:0)
迟了一年多,但我认为你要找的答案是在(本机)Java线程中运行Resque worker和你的应用程序。由于您使用的是JRuby :: Rack,答案是JRuby::Rack::Worker。将其添加到 web.xml :
<context-param>
<param-name>jruby.worker</param-name>
<param-value>resque</param-value>
</context-param>
<!--
<context-param>
<param-name>QUEUES</param-name>
<param-value>mails,posts</param-value>
</context-param>-->
<listener>
<listener-class>org.kares.jruby.rack.WorkerContextListener</listener-class>
</listener>
如果您正在发出声音,那么 web.xml.erb 示例https://github.com/kares/jruby-rack-worker只需创建 config / web.xml.erb 文件并复制内容它...如果您碰巧使用Trinidad,则会在其上构建extension(因此您无需设置web.xml并复制.jar文件)。