Laravel разрешение жрать несколько раз - PullRequest
0 голосов
/ 15 января 2020

У меня есть система, построенная с использованием Laravel, которая отправляет данные на внешний API. Чтобы иметь возможность макетировать HTTP-запросы в моих тестах, я разрешаю экземпляр Guzzle из сервисного контейнера:

    $data = ['foo' => 'bar'];
    $httpClient = resolve('GuzzleHttp\Client');
    try {
        $response = $httpClient->post('example.com', ['form_params' => $data]);
    } catch (RequestException $e) {
        if ($e->hasResponse()) {
            $response = $e->getResponse();
        }
    }

Так как это HTTP-запрос к внешнему API, а я нет Я знаю, сколько времени это займет, я использую задание, которое отправляется в очередь, поэтому оно запускается, когда это возможно.

Однако я достиг точки, где в очереди было 50 ожидающих элементов, поэтому я Я решил увеличить количество работников (до 25), чтобы все быстрее обрабатывать, но я начал получать: Illuminate\Queue\MaxAttemptsExceededException: App\Jobs\Submit has been attempted too many times or run too long. The job may have previously timed out.

Каждый работник был настроен на выполнение только одной попытки и без каких-либо временных ограничений. В журналах laravel не было зарегистрировано никаких исключений, кроме MaxAttemptsExceededException.

Может ли это быть связано с тем, как я создаю экземпляр клиента Guzzle? Когда мы делаем resolve('GuzzleHttp\Client'), возвращает ли Laravel один и тот же экземпляр для всех работников или это бесплатный экземпляр sh для каждого работника?

...