Как я могу запустить Laravel Queue только один раз?

Я использовал laravel 5.1 Queue для своей фоновой функции с async.
Но я хочу запустить эту функцию только 1 раз. Если эта функция не работает, я хочу сделать другой процесс.
Как я могу обнаружить, что моя работа провалилась или нет?
Я делаю правильно или неправильно? Что я должен изменить?
PS: я начинающий. Я использовал это в моем контроллере.

$job = new myjob($var1, $var2);
$this->dispatch($job);
$job->release();
if ($job->attempts() >= 1)
{
$job->delete();
//will do other process
}

2

Решение

Вы должны использовать --tries параметр с 1 значение, например:

php artisan queue:work --tries=1

Это будет запускать каждую задачу только один раз и не будет повторять ее в случае сбоя.

3

Другие решения

если у вас есть проблемы с доступом к консоли, вы можете определить попытки в контроллере:

<?php

namespace App\Jobs;

class ProcessPodcast implements ShouldQueue
{
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 5;
}

Ссылка: https://laravel.com/docs/5.4/queues#max-job-attempts-and-timeout

И исходя из того, чего вы хотите достичь, я предлагаю вам использовать Queued Event Listener.

https://laravel.com/docs/5.4/events#queued-event-listeners

Надеюсь что поможет 🙂

0

По вопросам рекламы [email protected]