Pregunta

Por lo que puedo ver que Gearman no admite trabajos programados o trabajos retrasados. Estaba pensando que tal vez el trabajo programado podría ser en cola en at Primero y luego se agregó a la cola de Gearman después del at El período de tiempo ha expirado.

at Las tareas son persistentes ya que se escriben como archivos para un directorio en el directorio de carrete del servidor. Por lo tanto, el único cuello de botella sería potencialmente un script simple para agregar la tarea a la cola de Gearman porque at No se puede distribuir en los servidores. Pasarlo a Gearman para procesar el trabajo real significa que puedo obtener el registro de trabajo adecuado, etc.

¿Es esta la mejor manera de abordar esto y tiene alguna idea alternativa?

La razón por la que he optado por Gearman sobre otras soluciones de cola es que tiene una extensión de PHP.

El código que estoy escribiendo se utiliza para mantener una cola de correos electrónicos que deben enviarse. Por lo tanto, puedo especificar que quiero enviar un correo electrónico a ejemplo@example.org a las 9.50 del viernes.

¿Fue útil?

Solución

He decidido ir al at ruta como se establece originalmente en mi pregunta. Para el propósito, he escrito un pequeño envoltorio PHP para el at binario y lo probé en Ubuntu. Si está interesado, se puede encontrar en GitHub: http://github.com/treffynnon/php-at-job-queue-wrapper

Otros consejos

Una solución bastante hacky, que solo funcionaría bien en la resolución por hora o diaria sería hacer que el nombre del trabajo (función) contenga la fecha en que deseaba que lo enviara. Luego, tenga a los trabajadores que comienzan en Cron cada hora o día para registrarse para esos trabajos.

Por ejemplo, si desea enviar un correo electrónico a las 9 a.m. el lunes 12 de marzo de 2012, agregue un trabajo a la cola con un nombre como correo electrónico_2012-03-12_09: 00. Luego tenga un trabajo de Cron ejecutando por hora, que dirige a un trabajador que se registra para cualquier trabajo que coincida Email_ + Fecha y hora actuales.

Como digo, probablemente viable, ¡pero más bien hacky!

Actualización 1: Vi recientemente que los documentos para Persistencia de la base de datos de Gearmand Ahora mencione un campo llamado WHE_TO_RUN que es un EN T, y potencialmente podría mantener una marca de tiempo de la época de Unix. Este campo aún no parece ser referenciado en el código.

Si estás usando zend ...

SlMqueue es una capa de abstracción de cola de trabajo. Le permite usar fácilmente los sistemas de cola de trabajo en una aplicación Zend Framework 2. Por lo tanto, no le impone usar específicamente un tipo de cola de trabajo. Puede escribir su código y trabajos independientemente del sistema subyacente. Esto permite una gran flexibilidad y desacoplamiento de los sistemas.

https://github.com/juriansluiman/slmqueue

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top