Тайм-ауты Laravel Job при потоковой передаче большого файла из S3 в Cloudflare R2, несмотря на увеличение тайм-аута до 6Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Тайм-ауты Laravel Job при потоковой передаче большого файла из S3 в Cloudflare R2, несмотря на увеличение тайм-аута до 6

Сообщение Anonymous »

Используя Laravel v10, я пытаюсь передать данные PDF из S3 в Cloudflare R2, используя файловую систему Laravel вместе с League/flysystem-aws-s3-v3, этот процесс выполняется через выделенную очередь. Большую часть времени он работает отлично, но очень редко происходит сбой при передаче. В случае сбоя я возвращаю его в очередь заданий в надежде, что в следующий раз оно завершится успешно.

Код: Выделить всё

public function handle(): void
{
set_time_limit(0);

$apiResponse = Http::get('https://url.com?',
[
'key' => 'keystring',
'fileId' => $orderProduct->file_name,
]);

if($apiResponse->failed()){
if($apiResponse->clientError()){
Log::error($apiResponse->clientError());
}
if($apiResponse->serverError()){
Log::error($apiResponse->serverError());
}
Log::error('Released back to jobs and retry at '.now()->addMinutes(360));
$this->release(now()->addMinutes(360));
}

if($apiResponse->successful()){
Log::info('200 status range response for order');

$fileLink = $apiResponse->body();
$targetFile = $this->createFilename();

try{
$disk = Storage::disk('r2');
$result = $disk->put(
$targetFile,
fopen($fileLink, 'r'));
} catch (Throwable $e){
Log::error('Could not Upload file '.$e->getMessage());
}

if($result == true){
Log::info('Move to Cloudflare successful');
}else{
Log::error('Move to Cloudflare FAILED');
Log::error('Released back to jobs and retry at '.now()->addMinutes(360));
$this->release(now()->addMinutes(360));
}
}
}
Я установил для throw значение true в определении файла конфигурации filesystem.php и поместил часть кода для загрузки в try/catch, но ошибка по-прежнему не возвращалась. После трех попыток задание по-прежнему не удается.
Это заставило меня задуматься о тайм-аутах и ​​о том, являются ли передаваемые и загружаемые файлы особенно большими. Я изучил конкретный PDF-файл, его размер составляет 1,6 ГБ. Я просмотрел таблицуfail_jobs и увидел в исключении, что тайм-аут действительно истекает.

Код: Выделить всё

Illuminate\Queue\TimeoutExceededException: App\Jobs\MyJob has timed out. in /var/www/vhosts/domain.co.uk/subdomain.domain.co.uk/vendor/laravel/framework/src/Illuminate/Queue/TimeoutExceededException.php:15
Поэтому я каждый раз увеличивал время ожидания на 10 минут, и текущее время составляет 40 минут (Supervisor также установил время ожидания 40 минут)

Код: Выделить всё

//app/Jobs/MyJob.php
public $timeout = 2400;
//config/queue.php
'retry_after' => 2400,
Все равно не получается! Затем я увеличил его до 60 минут, но время все равно истекает, наверняка этого должно быть достаточно ?! Сайт находится на собственной виртуальной машине nix, с машиной не происходит ничего особенно сложного. Должен ли я подходить к потоку/загрузке по-другому с точки зрения кода? Я рассматриваю возможность изменения кода и фактической загрузки файла локально перед загрузкой, но потоковая передача более эффективна для использования памяти.
Есть ли способ при запуске задания узнать, сколько попыток оно предприняло ранее? Например, если задание выполняется в третий раз (третий перед сбоем), я мог бы вставить условие, которое загружает и выгружает вместо потоковой передачи (я хочу сделать потоковую передачу опцией по умолчанию, поскольку она работает большую часть времени и только возвращается к традиционной загрузке/выгрузке в крайнем случае).

Подробнее здесь: https://stackoverflow.com/questions/786 ... pite-incre
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Расширить тайм -ауты селена, чтобы избежать тайм -аута для чтения Urllib3 (120S)
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Расширить тайм -ауты селена, чтобы избежать тайм -аута для чтения Urllib3 (120S)
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Расширить тайм -ауты селена, чтобы избежать тайм -аута для чтения Urllib3 (120S)
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Тайм-ауты Apache EntityUtils.toString() для большого ответа
    Anonymous » » в форуме JAVA
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Получение ошибки тайм-аута — увеличьте значение тайм-аута отправки при привязке.
    Anonymous » » в форуме C#
    0 Ответы
    61 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»