- Horizon Версия: 3.7.2 / 3.4.7
- Laravel Версия: 6.17.0
- PHP Версия: 7.4.4
- Redis Driver & Version: predis 1.1.1 / phpredis 5.2.1
- Database Driver & Version: -
У нас странные ошибки с нашим Horizon. В основном это то, что происходит: - Работа в очереди. И начинает обработку.
Через 90 секунд (наше значение конфигурации тайм-аута) истекает время ожидания.
Через 120 секунд (наше retry_after
значение ) задание повторено.
Повторное задание выполнено успешно.
Через 15 минут или 30 минут исходное задание (истекло) , С выполнением фактической работы.
Похоже, что это может случиться с любой работой. Например, если почтовые сообщения находятся в очереди, пользователь сначала получает электронное письмо, а через 15 или 30 минут пользователь получает другое электронное письмо. То же самое.
Здесь наши конфигурационные файлы
config/database.php
:
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
config/queue.php
:
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('DEFAULT_QUEUE_NAME', 'default'),
'retry_after' => 120, // 2 minutes
'block_for' => null,
],
config/horizon.php
:
'environments' => [
'production' => [
'supervisor-1' => [
'connection' => env('HORIZON_CONNECTION', 'redis'),
'queue' => [env('DEFAULT_QUEUE_NAME', 'default')],
'balance' => 'simple',
'processes' => 10,
'tries' => 3,
'timeout' => 90,
],
],
]
Вот как это выглядит в Horizon Dashboard
Это когда время первоначального задания истекло. Это остается так в Recent Jobs
, пока повторные попытки работают. ![horizon1](https://user-images.githubusercontent.com/1574232/80081135-d379aa80-8552-11ea-8d10-aea79c16a186.png)
Через почти полчаса оно меняется на следующее:
![horizon2](https://user-images.githubusercontent.com/1574232/80081160-dc6a7c00-8552-11ea-8c4d-aa3bc3cc91e1.png)
Это те же самые теги, я только затемнил имена.
Вот журналы, которые мы видим (время здесь в UT C)
[2020-04-22 11:24:59][88] Processing: App\Mail\ReservationInformation
[2020-04-22 11:29:00][88] Failed: App\Mail\ReservationInformation
[2020-04-22 11:29:00][88] Processing: App\Mail\ReservationInformation
[2020-04-22 11:56:21][88] Processed: App\Mail\ReservationInformation
Примечание : С Predis мы также видим некоторые журналы, такие как Error while reading line from the server. [tcp://REDIS_HOST:6379]
, но с PHPRedis их не было.
Мы попробовали много разных комбинаций, чтобы устранить проблему. И это случилось в каждой комбинации. Таким образом, мы думаем, что это должно быть что-то с Horizon.
Мы попробовали: - Predis с Redis 5 и Redis 3
Predis с различными значениями read_write_timeout
PHPRedis с Redis 5 и Redis 3
THP был включен на одном сервере. Поэтому мы также попробовали все комбинации с сервером, на котором отключен THP.
Мы были на Laravel 6.11 и Horizon 3.4.7, а затем обновлены до Laravel 6.14 и Horizon 3.7.2
Работает только один экземпляр Horizon. И никакая другая очередь не обрабатывается в этом экземпляре Horizon.
Любая информация или советы, которые можно попробовать, приветствуются!