У меня есть система, построенная с использованием 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 для каждого работника?