2011-04-09 40 views
5

Por el momento, estoy ejecutando solo un hilo de trabajo de beanstalk para mi proyecto, que maneja trabajos basados ​​en cron y trabajos en tiempo real. Entonces, quiero separarlo en dos trabajadores. Un trabajador se usa para rastrear los trabajos basados ​​en cron y uno más para rastrear los trabajos asincrónicos en tiempo real. Entonces, la eficiencia del trabajador mejorará. Cualquiera me puede ayudar en esto,Cómo ejecutar múltiples beanstalk worker usando php

  1. ¿Cómo ejecutar y desamonizar varios trabajadores de beanstalk usando php?
  2. ¿Una secuencia de comandos de ejemplo para manejar varios trabajadores de beanstalk?

NOTA: Actualmente estoy usando pheanstalk php lib.

+0

¿Y también cómo ver varios tubos? – karuh24

Respuesta

6

Con pheanstalk, (u otras bibliotecas), si desea aceptar trabajos de varias filas, simplemente mírelas.

$pheanstalk->watch('testtube') 
      ->watch('tube2') 
      ->watch('tube3'); 
$pheanstalk->reserve(); // get the next job from any of the tubes (+ 'default') 

En cuanto a los trabajadores que manipulan, actualmente estoy usando Supervisord para algunos scripts muy similares que quiero seguir corriendo. Es un daemon basado en python donde el script que desea ejecutar se enumera en un archivo de configuración muy simple. (agregar más trabajadores literalmente cambia un solo número y vuelve a cargar la configuración).

Una cosa que he hecho se basa en la entrada del blog running-the-worker. Supervisord ejecuta un script de shell. Ese script ejecuta el PHP que a su vez devuelve un valor (con exit($x)). Si devuelvo un valor del queue-runner, (por ejemplo), 99, dejé el script de shell para cerrar el trabajador. Otro valor puede reiniciar al instante al trabajador, Cualquier otra cosa, duerme durante unos segundos, antes de que se reinicie.

+0

Gracias Alister. – karuh24

+0

El ejemplo anterior para ver múltiples tubos está bien. Pero la secuencia de comandos anterior dice que debería ver múltiples tubos en un script de trabajador único. Supongamos que si queremos reiniciar un tubo en particular, ¿cómo reinicio un tubo en particular? y ¿Cómo administro cada tubo por separado? ¿Necesitamos escribir script de trabajador para cada tubo? Si es así, ¿qué pasa con el script de inicio para múltiples trabajadores? ¿Cómo administro guiones múltiples de trabajador en el init.d? – karuh24

+0

¿Qué quiere decir con reiniciar el tubo? Desea que el mismo script se ejecute varias veces, para ver tubos individuales, por ejemplo, luego inicie varios trabajadores, y tal vez pase el nombre del tubo para mirar, en la línea de comando. –