Из документации пакета spatie/laravel-stripe-webhooks :
Мы настоятельно рекомендуем вам поставить это задание в очередь, поскольку это сведет к минимуму время ответа на запросы веб-перехватчика. Это позволяет обрабатывать больше запросов веб-перехватчика полосы и избегать таймаутов.
И вот пример, который они приводят:
class HandleChargeableSource implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
/** @var \Spatie\WebhookClient\Models\WebhookCall */
public $webhookCall;
public function __construct(WebhookCall $webhookCall)
{
$this->webhookCall = $webhookCall;
}
public function handle()
{
// do your work here
// you can access the payload of the webhook call with `$this->webhookCall->payload`
}
}
Насколько я понимаю, этот пакет работает следующим образом:
\Spatie\StripeWebhooks\StripeWebhooksController__invoke.Я был бы очень признателен за объяснение, почему я должен поставить саму работу в очередь. Насколько я знаю, одного контроллера, отправляющего задание, должно быть достаточно для minimize the response time of the webhook requests.
Я что-то упускаю? Не используется ли очередь дважды для одного и того же события веб-перехватчика?
Заранее благодарю вас за ответы.






Обновлено: действительно нет необходимости ставить задания в очередь, поскольку входящие запросы веб-перехватчика уже поставлены в очередь. Файл readme этого пакета устарел. В 2021 году они добавили пакет под названием spatie/laravel-webhook-client, который отвечает за постановку в очередь входящих веб-перехватчиков. В то время они не обновляли readme.
Ваше понимание работы пакета в основном правильное. Когда вызывается конечная точка веб-перехватчика, она отправляет ProcessWebhookJob в свою собственную очередь. Это задание, в свою очередь, проверит, какие события произошли, и отправит задания, которые вы зарегистрировали для этих событий.
Если вы не определите свои собственные задания как помещаемые в очередь, они будут обрабатываться в том же процессе, что и задание ProcessWebhook. Это может привести к задержкам обработки и даже тайм-аутам, если выполнение заданий занимает больше времени или необходимо обработать много событий.
Таким образом, имеет смысл определить ваши собственные задания как помещаемые в очередь, чтобы помещать их в очередь при отправке. Это освободит задание ProcessWebhook только для отправки заданий, а не для обработки.
Он отправляет в очередь задание ProcessStripeWebhook (настроенное с помощью «stripe-webhooks.queue»), а не обязательно ваши собственные задания. Когда задание веб-перехватчика обрабатывается, оно проверяет, какие задания необходимо запланировать, исходя из того, какие задания вы зарегистрировали для событий. Если вы не укажете свои собственные задания для постановки в очередь, они будут обрабатываться в том же процессе, что и задание WebhookJob. Таким образом, если событий много, это может привести к задержкам обработки и тайм-аутам, поэтому имеет смысл поместить ваши собственные задания в отдельную очередь, чтобы задание веб-перехватчика отвечало только за отправку заданий.
@Закария, я соответствующим образом обновил свой ответ.
Все еще не понимаю @Henridv. Если все, что делает контроллер, — это помещает задание в очередь и возвращает ответ HTTP 200 в Stripe, где будет узкое место? Это работник, который выполняет всю работу в автономном режиме. В любом случае никакая обработка запроса не будет выполняться, вне зависимости от того, ставите ли вы задание в очередь или нет.
@Закария, я думаю, ты совершенно прав. Я глубоко углубился в код и увидел, что файл readme не обновился, когда они добавили пакет spatie/laravel-webhook-client. Этот пакет отвечает за постановку в очередь запросов веб-перехватчика. До этого входящие вебхуки обрабатывались немедленно, поэтому имело смысл ставить задания в очередь.
звучит как объяснение, которое имеет смысл. Спасибо, что нашли время разобраться в этом!
Я попытался сделать задание не ставящимся в очередь. Он по-прежнему отправляет в sqs. Это имеет смысл, поскольку если вы проверите код
class ProcessStripeWebhookJob, вы увидите, что он отправляется в очередь, даже если вы делаете задание, которое вы пишете, не помещаемым в очередь.