2011-04-28 22 views
5

Actualmente estamos utilizando Resque en JRuby y utilizamos dos formas de iniciar un Worker cuando desarrollamos.Thread Safe Resque Trabajadores en JRuby cuando se despliega como WAR

  • Usando Rake:
QUEUE=* jruby -J-cp /path/to/library -S rake environment resque:work
  • mediante programación, inicializado a través de un Sinatra bastidor aplicación (o lo que sea), con el tiempo llamando a una clase con:

def start 
    @worker = Resque::Worker.new(@queues) 
    @worker.verbose = @vervose 
    @worker.work(@interval) 
end 

def stop 
    @worker.try(:shutdown) 
end 

Aunque ambos estas soluciones son aceptables para nosotros en el desarrollo. Me preocupa cómo esto funcionaría cuando se implemente en Tomcat, por ejemplo.

En Ruby, normalmente engendraría o demonizaría a los trabajadores, y luego utilizaría una herramienta de supervisión para observar los PID.

¿Tendría sentido iniciar a los trabajadores programáticamente cuando se despliegan? Me pregunto si comienza un nuevo hilo en Java o desordena el proceso jruby, si no debería usar, otra biblioteca de programación como cuarzo para iniciar un trabajador. o una tarea de rake que se inicia en la tarea de implementación?

Podría crear un modelo de trabajador y luego hacer un seguimiento de los trabajadores en un db, pero eso no tiene sentido para mí.

Cualquier ayuda o conocimiento será apreciado.

Gracias.

Refs:

https://github.com/defunkt/resque

http://rubydoc.info/github/defunkt/resque/master/Resque/

http://blog.thomasmango.com/post/636319317/resque-in-production

https://gist.github.com/486161

Respuesta

0

Usando rake resque:work va a arrancar el entorno de Rails y empezar un trabajador, que según las encuestas de empleo, tenedores sí mismo en un proceso (sub) de trabajo, procesa en el trabajo y luego se va.

Si desea ejecutar varios trabajadores a continuación, utilizar la variable COUNT:

QUEUE=* COUNT=5 jruby -J-cp /path/to/library -S rake environment resque:work

Qué aspecto de esta se desplegarían a Tomcat? Esta es toda la línea de comando.

+0

¿Cómo harías esto si tu aplicación JRuby/Rails se implementara a través de un archivo WAR en Tomcat? ¿Debo implementar 2 Tomcats, uno para el "servidor de rieles" y otro para el "entorno de rake resque: trabajo"? ¿Si es así, cómo? –

0

Más de un año tarde, pero creo que la respuesta que estaba buscando es ejecutar los trabajadores de Resque junto con su aplicación en hilos Java (nativos). Como está utilizando JRuby :: Rack, la respuesta es JRuby::Rack::Worker. Agregue esto a su 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> 

Si está warbling hay un web.xml.erb muestra https://github.com/kares/jruby-rack-worker acaba de crear un archivo de configuración /web.xml.erb y copiar el contenido a eso ...Si usa Trinidad, se construye un extension encima (de modo que no necesita configurar un archivo web.xml y copiar el archivo .jar).