Estoy usando el Supervisor de Laravel para la administración de colas y agregué la tabla fail_jobs usando los comandos predeterminados ( php artisan queue:failed-table
+ migrate
).
A veces, un trabajo falla, pero la tabla fail_jobs nunca se llena porque aparentemente intenta agregar un registro sin una clave principal. No tengo idea de dónde en Laravel hacer que genere un uuid.
Encuentro problemas como Duplicate entry '014c3080-3ee3-4198-946c-dfe1d8d858a7' for key 'failed_jobs_uuid_unique'
, pero eso tiene una causa diferente. Mi aplicación ni siquiera genera un uuid.
Parece que Laravel está intentando registrar el mismo trabajo fallido con el mismo UUID varias veces. Esto puede suceder cuando dos trabajadores eligen el mismo trabajo y ambas ejecuciones fallan. El primer trabajador podrá registrar el trabajo correctamente, pero el segundo trabajador recibirá este error porque ya existe una entrada con el mismo UUID.
consulte este enlace para evitar este problema
https://divinglaravel.com/prevent-your-queued-jobs-from-duplicating
El uuid de un trabajo se genera a través de un controlador llamado " database-uuids ". Esto debe configurarse de forma predeterminada dentro de su config/queue.php de la siguiente manera (cerca del final del archivo):
'failed' => [ 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), 'database' => env('DB_CONNECTION', 'mysql'), 'table' => 'failed_jobs', ],
A menos que haya proporcionado otro valor para QUEUE_FAILED_DRIVER en su archivo .env, sus trabajos fallidos deben recibir un uuid de forma predeterminada.
Si esto no funciona, deje un comentario sobre esta respuesta e intentaré buscar otra solución.
Cambie el campo uuid anulable en la tabla fail_jobs.