Атрибут tries
Атрибут tries класса Job определяет максимальное количество попыток выполнения задания в очереди. Если задание завершается с ошибкой, оно будет повторно отправлено в очередь до достижения указанного лимита. Этот атрибут полезен для обработки временных сбоев, таких как проблемы с сетью или недоступность внешних сервисов. Если количество попыток превышено, задание помечается как неудавшееся и может быть обработано методом failed.
Синтаксис
<?php
class MyJob implements ShouldQueue
{
public $tries = 5;
public function handle()
{
// logic
}
}
?>
Пример
Давайте создадим задание, которое будет пытаться выполниться максимум три раза:
<?php
namespace App\Jobs;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Models\User;
class SendEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, SerializesModels;
public $tries = 3;
protected $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function handle()
{
// Отправляем email пользователю
mail($this->user->email, 'Welcome', 'Welcome to our service!');
}
}
?>
Пример
Теперь отправим задание в очередь:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Jobs\SendEmailJob;
class UserController extends Controller
{
public function register()
{
$user = User::find(1);
SendEmailJob::dispatch($user);
return 'Job dispatched with 3 attempts limit';
}
}
?>
Пример
Атрибут tries также может быть переопределён в методе handle через свойство job. Это позволяет динамически устанавливать количество попыток в зависимости от условий:
<?php
namespace App\Jobs;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class DynamicTriesJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, SerializesModels;
public $tries = 5;
public function handle()
{
if ($this->attempts() > 3) {
$this->job->setTries(7);
}
// logic
}
}
?>
Смотрите также
-
атрибут
backoff,
который задаёт задержку между повторными попытками -
атрибут
timeout,
который определяет максимальное время выполнения задания -
атрибут
maxExceptions,
который ограничивает количество исключений перед неудачей -
метод
failed,
который вызывается при превышении лимита попыток