Laravel-SQS fifo queue - задания выполняются нормально, но остаются в полете и терпят неудачу - PullRequest
0 голосов
/ 23 декабря 2018

Чтобы ограничить количество заданий, приходящих из моей очереди, я ввел некоторый код в свой файл заданий PHP.После того, как задание отправлено, я некоторое время сплю:

// random nr between 3 and 4 min
$r = rand(180, 240);
sleep($r);

Очередь, которую я использую, - это очередь SQS FIFO, и отправленные задания туда идут нормально.Мой работник использует только один процесс и пытается 3 раза:

more aws-worker.conf
command=php /var/www/html/website/artisan queue:work sqs_aws --sleep=5 --tries=3
autostart=true
autorestart=true
user=root
numprocs=1

Однако, когда я отправляю 2 задания, работник очереди освобождает их примерно через 1 минуту, но не удаляет их в SQS.Таким образом, они остаются в полете и через 3 раза получают метку сбоя:

[2018-12-23 13:21:54] Processing: App\Jobs\DispatchAwsGatewayJob
[2018-12-23 13:22:56] Processing: App\Jobs\DispatchAwsGatewayJob

[2018-12-23 13:27:55] Processing: App\Jobs\DispatchAwsGatewayJob
[2018-12-23 13:29:01] Processing: App\Jobs\DispatchAwsGatewayJob

[2018-12-23 13:34:00] Processing: App\Jobs\DispatchAwsGatewayJob
[2018-12-23 13:35:06] Processing: App\Jobs\DispatchAwsGatewayJob

[2018-12-23 13:40:05] Processing: App\Jobs\DispatchAwsGatewayJob
[2018-12-23 13:40:05] Failed:     App\Jobs\DispatchAwsGatewayJob

[2018-12-23 13:41:10] Processing: App\Jobs\DispatchAwsGatewayJob
[2018-12-23 13:41:10] Failed:     App\Jobs\DispatchAwsGatewayJob

Некоторые другие подробности очереди:

Default Visibility Timeout: 30 seconds
Message Retention Period:   4 days
Receive Message Wait Time:  0 seconds

Возможно, неактивный код мешает очереди fifo?У меня нет других возможностей ограничить количество заданий в очереди ....

1 Ответ

0 голосов
/ 01 марта 2019

Задания по умолчанию имеют время ожидания 60 секунд.По истечении времени ожидания работник убивается, и задание возвращается в очередь, если не было достигнуто максимальное количество попыток, и в этом случае задание станет неудачным.

Вы можете увеличить время ожидания для заданий либо вна уровне рабочего очереди или на уровне задания.

Если вы хотите увеличить время ожидания для работника очереди, укажите время ожидания в командной строке:

php artisan queue:work --timeout=300

Если вы хотитеЧтобы увеличить время ожидания для определенного задания, задайте свойство $timeout класса задания:

public $timeout = 300;

Однако следующая проблема - Default Visibility Timeout.Поскольку для него задано только 30 секунд, задание снова станет доступным в очереди, и другой работник может его забрать и запустить.Если у вас есть только один работник, это не большая проблема.Но вы захотите исправить это сейчас, чтобы не столкнуться с проблемами позже, когда решите добавить больше работников.

Значение Default Visibility Timeout должно быть больше максимального времени, которое вы ожидаете от любого изваша работа, чтобы бежать.Итак, если $timeout равно 300, Default Visibility Timeout должно быть> 300.

...