РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1365 of 1392 menu

Атрибут maxExceptions

Атрибут maxExceptions класса Job позволяет задать лимит на количество исключений, которые могут быть выброшены в процессе выполнения задания. Если задание выбрасывает исключения чаще, чем указано в атрибуте, оно будет считаться неудавшимся и помещено в очередь неудавшихся заданий. Это полезно для предотвращения бесконечных повторных попыток в случае постоянных ошибок.

Синтаксис

Атрибут объявляется как публичное свойство класса Job.

<?php class ProcessPodcast implements ShouldQueue { public $maxExceptions = 3; } ?>

Пример

Давайте создадим задание, которое будет выбрасывать исключение при каждой попытке выполнения, и ограничим количество таких исключений тремя:

<?php namespace AppJobs; use AppModelsPodcast; use IlluminateContractsQueueShouldQueue; use IlluminateFoundationBusDispatchable; use IlluminateQueueInteractsWithQueue; use IlluminateQueueSerializesModels; class ProcessPodcast implements ShouldQueue { use Dispatchable, InteractsWithQueue, SerializesModels; public $maxExceptions = 3; protected $podcast; public function __construct(Podcast $podcast) { $this->podcast = $podcast; } public function handle() { throw new \Exception('Processing error'); } } ?>

Пример

Теперь отправим задание в очередь и посмотрим, сколько раз оно будет выполнено перед тем, как будет помечено как неудавшееся:

<?php namespace AppHttpControllers; use AppJobsProcessPodcast; use AppModelsPodcast; class PodcastController extends Controller { public function process() { $podcast = Podcast::first(); ProcessPodcast::dispatch($podcast); echo "Job dispatched"; } } ?>

После выполнения кода задание будет повторно запущено три раза, каждый раз выбрасывая исключение. На четвёртый раз оно будет помещено в таблицу неудавшихся заданий.

Пример

Давайте рассмотрим более сложный пример, где задание выполняет внешний запрос и может выбрасывать разные исключения:

<?php namespace AppJobs; use IlluminateContractsQueueShouldQueue; use IlluminateFoundationBusDispatchable; use IlluminateQueueInteractsWithQueue; use IlluminateQueueSerializesModels; use IlluminateSupportFacadesLog; class FetchExternalData implements ShouldQueue { use Dispatchable, InteractsWithQueue, SerializesModels; public $maxExceptions = 2; public function handle() { $client = new \GuzzleHttp\Client(); try { $response = $client->get('https://api.example.com/data'); $data = json_decode($response->getBody(), true); Log::info('Data fetched successfully', $data); } catch (\Exception $e) { Log::error('Fetch error: ' . $e->getMessage()); throw $e; } } } ?>

В этом примере, если внешний API недоступен, задание будет повторяться до двух раз. После третьего исключения оно будет признано неудавшимся.

Смотрите также

  • атрибут tries,
    который задает максимальное количество попыток выполнения задания
  • атрибут backoff,
    который определяет задержку между повторными попытками
  • атрибут timeout,
    который устанавливает лимит времени выполнения задания
  • метод failed,
    который вызывается при неудачном выполнении задания
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить