Laravel Horizon: элементы больше не помещаются в очередь по непонятной причине

Я запускал приложение на подготовленном сервере Laravel. У нас есть несколько заданий электронной почты, которые ставятся в очередь, и мы используем Horizon для управления очередями. Это всегда работало без проблем, но по какой-то причине мы что-то сломали, и я не могу это исправить.

Это наша установка.

.env

APP_ENV=dev
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
QUEUE_DRIVER=redis

config / queues.php

 return [
   'default' => env('QUEUE_DRIVER', 'sync'),
   'connections' => [
     'sync' => [
       'driver' => 'sync',
     ]
     'redis' => [
       'driver' => 'redis',
       'connection' => 'default',
       'queue' => 'medium',
       'retry_after' => 90,
     ],
  ],
];

config / horizon.php

return [
  'use' => 'default',
  'waits' => [
    'redis:default' => 60,
  ],
  'environments' => [
    'dev' => [
      'high-prio' => [
        'connection' => 'redis',
        'queue' => ['high'],
        'balance' => 'simple',
        'processes' => 10,
        'tries' => 5,
      ],
      'default-prio' => [
        'connection' => 'redis',
        'queue' => ['medium', 'low'],
        'balance' => 'auto',
        'processes' => 10,
        'tries' => 3,
      ],
    ],
  ],
];

Я проверил результат информации redis-cli, чтобы убедиться, что порт правильный:

forge@denja-dev:~$ redis-cli info
# Server
redis_version:3.2.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:11aa79fd2425bed9
redis_mode:standalone
os:Linux 4.4.0-142-generic x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:5.4.0
process_id:1191
run_id:fcc57fa2c17440ab964538c2d986dc330d9e1223
tcp_port:6379
uptime_in_seconds:3045
uptime_in_days:0
hz:10
lru_clock:13667343
executable:/usr/bin/redis-server
config_file:/etc/redis/redis.conf

Когда я захожу в / горизонт / приборную панель, все работает нормально. Я немного поигрался с добавлением некоторых метаданных в полезную нагрузку для заданий в очереди, и тогда начались проблемы. Затем я просто снова удалил этот код и в основном вернулся к предыдущей базе кода. Больше нет разницы, поэтому я подозреваю, что у меня другая проблема.

Однако - я не получаю НИКАКОГО исключения, когда я добавляю что-то в очередь. В Bugsnag нет новых записей, и мой процесс продолжается без ошибок.

Есть идеи, что я могу еще проверить, чтобы обнаружить реальную проблему? Есть проблема с конфигом? Я немного растерялся, если честно, тем более, что у меня нет информации, с которой можно было бы работать :(

Я также проверил с помощью tinker, могу ли я установить соединение с Redis, и это тоже отлично работает без исключения:

$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.2.0RC3 — cli) by Justin Hileman
>>> Illuminate\Support\Facades\Redis::connection('default')
=> Illuminate\Redis\Connections\PredisConnection {#3369}

person David Heremans    schedule 06.05.2019    source источник
comment
Вы работаете php artisan queue:work, верно?   -  person squareborg    schedule 06.05.2019
comment
Наш сценарий развертывания на Laravel Forge имеет следующее: php artisan horizon: завершение очереди php artisan: перезапуск, который запускается при каждом развертывании (в настоящее время автоматически запускается при каждой фиксации github, поэтому он был запущен уже несколько раз - также на панели управления горизонтом указано все работает нормально и процессы запущены ...)   -  person David Heremans    schedule 06.05.2019
comment
Да, я перечитал и увидел, что горизонт думает, что все хорошо.   -  person squareborg    schedule 06.05.2019
comment
Ужас в том, что у меня просто нет ошибок, с которыми можно было бы работать - я только что обновил .env, чтобы установить QUEUE_DRIVER для синхронизации, и я мгновенно получил свою электронную почту, поэтому в коде нет ничего, что вызывает проблемы ... Дело в том, что я даже не вижу ничего на горизонте ... Он отлично работает, когда работает, но не дает мне никакой информации, когда это не так :(   -  person David Heremans    schedule 06.05.2019
comment
Чувствую вашу боль, несколько часов потратил на похожую проблему.   -  person squareborg    schedule 06.05.2019
comment
Схожу с ума по этому поводу. Серьезно не вижу проблемы :(   -  person David Heremans    schedule 07.05.2019


Ответы (1)


Причина этой проблемы заключалась в том, что уведомление, с которым я это тестировал, действительно использовало черту Queuable, но не реализовывало интерфейс ShouldQueue. Последнее необходимо, чтобы Laravel автоматически ставил эти уведомления в очередь.

Мы заметили это, когда начали тестирование с использованием других уведомлений, которые прошли нормально.

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

person David Heremans    schedule 07.05.2019