Java 当部署为WAR时,JRuby中的线程安全重调工作人员
目前,我们在JRuby中使用Resque,并且在开发时使用两种启动Worker的方法Java 当部署为WAR时,JRuby中的线程安全重调工作人员,java,tomcat,rake,jruby,resque,Java,Tomcat,Rake,Jruby,Resque,目前,我们在JRuby中使用Resque,并且在开发时使用两种启动Worker的方法 使用耙子: 以编程方式,通过Sinatra Rack应用程序(或其他任何应用程序)初始化,最终通过以下方式调用类: 虽然这两种解决方案都是我们在开发中可以接受的。例如,当部署到Tomcat时,我担心这将如何工作 在Ruby中,通常会产生或妖魔化工人,然后使用监视工具监视pid 部署时以编程方式启动worker有意义吗?我想知道它是否会在java中启动一个新线程,或者会扰乱jruby进程,如果不是,我应该
- 使用耙子:
- 以编程方式,通过Sinatra Rack应用程序(或其他任何应用程序)初始化,最终通过以下方式调用类:
使用rake resque:work将引导Rails环境并启动一个worker,该worker轮询一个作业,将自身分叉到一个(子)worker进程,处理该作业,然后退出 如果要运行多个worker,请使用
COUNT
变量:
QUEUE=*COUNT=5 jruby-J-cp/path/to/library-S rake环境resque:work
这方面的哪些内容将部署到Tomcat?这都是命令行。晚了一年多,但我认为您要寻找的答案是在(本机)Java线程中沿应用程序运行Resque workers。因为您使用的是JRuby::Rack,所以答案是。将此添加到web.xml:
jruby.worker
重调
org.kares.jruby.rack.WorkerContextListener
如果您正在使用web.xml.erb示例,只需创建一个config/web.xml.erb文件并将内容复制到其中。。。如果您碰巧使用Trinidad,它上面有一个内置的(因此您不需要设置web.xml并复制.jar文件)。如果您的JRuby/Rails应用程序是通过WAR文件部署到Tomcat中的,您将如何实现这一点?我是否必须部署两个Tomcat,一个用于“rails服务器”,另一个用于“rake环境resque:work”?如果是,怎么做?
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
<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>