Я использовал 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
}
Вы должны использовать --tries
параметр с 1
значение, например:
php artisan queue:work --tries=1
Это будет запускать каждую задачу только один раз и не будет повторять ее в случае сбоя.
если у вас есть проблемы с доступом к консоли, вы можете определить попытки в контроллере:
<?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
Надеюсь что поможет 🙂