Java 当部署为WAR时,JRuby中的线程安全重调工作人员

Java 当部署为WAR时,JRuby中的线程安全重调工作人员,java,tomcat,rake,jruby,resque,Java,Tomcat,Rake,Jruby,Resque,目前,我们在JRuby中使用Resque,并且在开发时使用两种启动Worker的方法 使用耙子: 以编程方式,通过Sinatra Rack应用程序(或其他任何应用程序)初始化,最终通过以下方式调用类: 虽然这两种解决方案都是我们在开发中可以接受的。例如,当部署到Tomcat时,我担心这将如何工作 在Ruby中,通常会产生或妖魔化工人,然后使用监视工具监视pid 部署时以编程方式启动worker有意义吗?我想知道它是否会在java中启动一个新线程,或者会扰乱jruby进程,如果不是,我应该

目前,我们在JRuby中使用Resque,并且在开发时使用两种启动Worker的方法

  • 使用耙子:
  • 以编程方式,通过Sinatra Rack应用程序(或其他任何应用程序)初始化,最终通过以下方式调用类:
虽然这两种解决方案都是我们在开发中可以接受的。例如,当部署到Tomcat时,我担心这将如何工作

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

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

我可以创建一个工人模型,然后让它跟踪数据库中的工人,但这对我来说没有意义

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

多谢各位

参考文献:


使用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>