En ocasiones tenemos trabajos en segundo plano que pueden tardar varios segundos y es mejor que los procese el cron (el cron ejecuta hasta 1000 eventos de la cola de trabajos), pero no queremos un cronjob porque no se va a ejecutar todos los días, solamente cuando se dispare cierto evento. Para estos casos necesitamos indicar que ese worker y por consiguiente el evento entero se debe procesar en el cron.
Al registrar el worker, en lugar de llamar al método addWorker(), podemos llamar a un nuevo método addCronWorker():
WorkQueue::addCronWorker('MiWorker', 'Model.Producto.Update');
Este método debe añadir el worker a la lista y debe marcar los eventos de ese tipo como que solamente se deben ejecutar en el cron. Hay que modificar tanto la tabla como el modelo correspondiente, y también la función run() de la cola de trabajos, para indicar cuando se ejecuta desde el cron y cuando no.
España, 8 meses, nivel 36
|
|
16-10-2026 11:54:39 esteban Yo me encargo de esta tarea. |
|
|
19-10-2026 11:16:28 esteban ENVIADA - https://github.com/NeoRazorX/facturascripts/pull/2054 |
|
|
19-10-2026 11:16:41 esteban Añadir soporte para workers de cron en la cola de trabajos- Se modifica la clase WorkQueue para permitir la adición de workers que solo se ejecutan desde el cron. - Se agrega un nuevo método `addCronWorker` para registrar estos workers. - Se actualiza el método `run` para procesar eventos marcados como solo cron. - Se añade una nueva columna `cron` en la tabla de eventos de trabajo para indicar si un evento es exclusivo para cron. - Se actualiza la clase WorkEvent para incluir la propiedad `cron`. - Se implementan pruebas unitarias para verificar el comportamiento de los workers de cron. Archivos modificados: - Cron.php - work_events.xml - WorkEvent.php - WorkQueue.php - WorkQueueTest.php |