Do not speak Portuguese? Translate this site with Google or Bing Translator
Laravel Filas 8.x Manuseio de trabalho com falha

Posted on: February 10, 2022 10:58 AM

Posted by: Renato

Views: 2824

Filas 8.x / Manuseio de trabalho com falha


Manipulação de trabalho com falha

Às vezes, seus trabalhos em fila falharão. Não se preocupe, nem sempre as coisas saem como planejado! O Laravel inclui uma maneira conveniente de especificar o número máximo de vezes que um trabalho deve ser tentado. Uma vez que um trabalho tenha excedido este número de tentativas, ele será inserido na tabela do banco de dados failed_jobs. Para criar uma migração para a tabela failed_jobs, você pode usar o comando :queue:failed-table

php artisan queue:failed-table
php artisan migrate

Em seguida, ao executar seu queue worker , você pode especificar o número máximo de vezes que um trabalho deve ser tentado usando a opção no comando . Se você não especificar um valor para a opção , os trabalhos serão tentados apenas uma vez:--triesqueue:work--tries

php artisan queue:work redis --tries=3

Além disso, você pode especificar quantos segundos o Laravel deve esperar antes de tentar novamente um trabalho com falha usando o arquivo . Por padrão, uma tarefa é repetida imediatamente:--backoff

php artisan queue:work redis --tries=3 --backoff=3

Se você deseja configurar o atraso de repetição do job com falha por job, você pode fazer isso definindo uma propriedade backoffem sua classe de job enfileirada:

/**
 * The number of seconds to wait before retrying the job.
 *
 * @var int
 */
public $backoff=3;/**
* Calculate the number of seconds to wait before retrying the job.
*
* @return int
*/
public function backoff()
{
    return 3;
}

Você pode configurar facilmente "backoffs exponenciais" retornando uma matriz de valores de backback do método backoff. Neste exemplo, o atraso de nova tentativa será de 1 segundo para a primeira tentativa, 5 segundos para a segunda tentativa e 10 segundos para a terceira tentativa:

/**
* Calculate the number of seconds to wait before retrying the job.
*
* @return array
*/
public function backoff()
{
    return [1, 5, 10];
}

Limpeza após trabalhos com falha

Você pode definir um método faileddiretamente em sua classe de tarefa, o que permite executar uma limpeza específica da tarefa quando ocorrer uma falha. Este é o local perfeito para enviar um alerta aos seus usuários ou reverter quaisquer ações tomadas pelo trabalho. A exceção Throwableque causou a falha do trabalho será passada para o método failed:

podcast=$podcast;
    }

    /**
     * Execute the job.
     *
     * @param  \App\Services\AudioProcessor  $processor
     * @return void
     */
    public function handle(AudioProcessor $processor)
    {
        // Process uploaded podcast...
    }

    /**
     * Handle a job failure.
     *
     * @param  \Throwable  $exception
     * @return void
     */
    public function failed(Throwable $exception)
    {
        // Send user notification of failure, etc...
    }
}

Eventos de trabalho com falha

Se você quiser registrar um evento que será chamado quando um trabalho falhar, você pode usar o . Este evento é uma ótima oportunidade para notificar sua equipe por e-mail ou Slack . Por exemplo, podemos anexar um callback a este evento daquele que vem com o Laravel:Queue::failingAppServiceProvider

connectionName
            // $event->job
            // $event->exception
        });
    }
}

Nova tentativa de trabalho com falha

Para ver todos os trabalhos com falha que foram inseridos na tabela do banco de dados , você pode usar o failed_jobscomando Artisan :queue:failed

php artisan queue:failed 
O comando listará o ID do trabalho, conexão, fila, tempo de falha e outras informações sobre o trabalho. A ID do trabalho pode ser usada para repetir o trabalho com falha. Por exemplo, para repetir um trabalho com falha que tenha um ID de , emita o seguinte comando:queue:failed5

php artisan queue:retry 5 

Se necessário, você pode passar vários IDs ou um intervalo de IDs (ao usar IDs numéricos) para o comando:

php artisan queue:retry 5 6 7 8 9 10

php artisan queue:retry --range=5-10

Para repetir todos os trabalhos com falha, execute o comando e passe como ID:queue:retryall

php artisan queue:retry all

Se você deseja remover um trabalho com falha, você pode usar o comando :queue:forget

php artisan queue:forget 5 

Para remover todos os seus trabalhos com falha, você pode usar o comando :queue:flush

php artisan queue:flush
    

Ignorar modelos ausentes

Quando um modelo Eloquent é injetado em um trabalho, ele é serializado automaticamente antes de ser enfileirado e restaurado quando o trabalho é processado. No entanto, se o modelo foi excluído enquanto o trabalho estava esperando para ser processado por um trabalhador, seu trabalho pode falhar com ModelNotFoundException.

Para maior comodidade, você pode optar por excluir automaticamente os trabalhos com modelos ausentes, definindo a propriedade do deleteWhenMissingModelsseu trabalho para true:

/**
 * Delete the job if its models no longer exist.
 *
 * @var bool
 */
public $deleteWhenMissingModels=true;

Fonte:

https://www.oulub.com/es-ES/Laravel/queues-dealing-with-failed-jobs


4

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (16) Variados (109) PHP (133) Laravel (171) Black Hat (3) front-end (29) linux (114) postgresql (39) Docker (28) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (56) devops (25) nodejs (5) npm (3) nvm (1) git (8) firefox (1) react (7) reactnative (5) collections (1) javascript (7) reactjs (8) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (2) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (12) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (5) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (3) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (43) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (2) jwt (5) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (3) Architecture (4) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (2) autorizacao (2) authentication (4) authorization (3) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1) Axios (1) Fetch (1) Deepin (1) vue (4) nuxt (1) PKCE (1) Oauth2 (2) webhook (1) TypeScript (1) tailwind (1) gource (2)

New Articles



Get Latest Updates by Email