Запишите источник отправки задания

#laravel

Вопрос:

Мне любопытно, знаете ли вы, ребята, какой-нибудь простой и надежный способ отследить источник того, что отправило задание Laravel.

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

Я имею в виду, что добавление свойства к заданию, вероятно, сделало бы это, но мне интересно, есть ли какой-то способ, который не включал бы изменения кода в отдельных заданиях.

Ответ №1:

Я думаю, вы ищете События для работы (документация Laravel)

Вы могли бы добавить это в свой app/Providers/AppServiceProvider.php — метод загрузки() или вы можете создать, например, один QueueJobProvider и добавить своего провайдера в config/app.php внутри ключа «провайдеры«.

С помощью этих событий вы можете получить полезную нагрузку по своему усмотрению и больше прав. Вы можете узнать больше об этой проблеме в документах Laravel здесь

 use IlluminateQueueEventsJobProcessed;
use IlluminateQueueEventsJobProcessing;
use IlluminateQueueEventsJobFailed;
use IlluminateQueueEventsJobExceptionOccurred;    

Queue::before(function (JobProcessing $event) {
    // Log::info($event);
    // Log::info($event->job->payload());
});

Queue::after(function (JobProcessed $event) {
    // Log::info($event);
    // Log::info($event->job->payload());
});

Queue::failing(function (JobFailed $event) {
    // Log::info($event);
    // Log::info($event->job->payload());
});

Queue::exceptionOccurred(function (JobExceptionOccurred $event) {
    // Log::info($event);
    // Log::info($event->job->payload());
});
 

Комментарии:

1. Да, они очень полезны, но я не думаю, что они полностью удовлетворяют мою потребность. Насколько я понимаю, они вызываются с объектами заданий, которые уже находятся в очереди, что не дает мне возможности узнать, куда в коде было отправлено задание. Единственное, о чем я могу думать в данный момент, — это сброс части трассировки стека в конструкторе заданий, но это кажется очень банальным.