Laravel Horizon:项目不再排队的原因不明

3

我一直在Laravel锻造的服务器上运行一个应用程序。我们有一些电子邮件作业正在排队,我们使用Horizon来管理我们的队列。这一直没有任何问题,但出于某种原因,我们已经破坏了某些东西,我无法修复它。

这是我们的设置。

.env

Original Answer: "最初的回答"

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的info结果,以确保端口正确:

我检查了redis-cli的info结果,以确保端口正确:

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

当我访问/horizon/dashboard时,一切都很正常。我试着给排队的作业添加一些元数据,这时问题就出现了。然后我又把那段代码删除了,基本上回到了之前的代码库。现在没有任何区别,所以我怀疑还有其他问题。
然而,当我向队列添加东西时,没有任何异常被抛出。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}

你正在运行 php artisan queue:work 对吧? - squareborg
我们在 Laravel Forge 上的部署脚本包括以下内容: php artisan horizon:terminate php artisan queue:restart 这些命令会在每次部署时运行(目前是在每次 GitHub 提交时自动触发,因此已经运行了几次 - 同时 horizon 仪表板显示一切正常,进程正在运行...)。 - David Heremans
是的,所以我重新阅读了,并看到Horizon认为一切都很好。 - squareborg
可怕的是,我根本没有任何错误可处理——我只是更新了.env文件,将QUEUE_DRIVER设置为sync,并立即收到了我的电子邮件,因此代码中没有其他引起问题的地方...问题在于即使我在horizon中看不到任何东西...当它工作得很好时,它非常有效,但是当它不工作时就没有信息可供参考 :( - David Heremans
我理解你的痛苦,我曾经花了几个小时处理类似的问题。 - squareborg
为这个问题疯狂了。真的找不到问题所在:( - David Heremans
1个回答

0
这个问题的原因是我测试时使用的通知确实使用了Queuable trait,但没有实现ShouldQueue接口。后者是必需的,以便Laravel自动将这些通知排队。
当我们开始使用其他通知进行测试时,我们注意到了这一点,而这些通知都能够正常通过。
我们唯一还有的问题是,我们本来期望邮件仍然会发送出去,因为它会同步发送,但由于某种原因它没有发送。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接