Laravel Horizon 未执行挂起的作业 - Kubernetes 和 Docker 环境

Laravel Horizon not executing pending jobs - Kubernetes and Docker environment

我们的 Laravel 应用在 Kubernetes 中有两个不同的 pods,

问题是当我检查 horizon 仪表板时,它显示 'Active',我可以在 'Pending Jobs' 部分看到作业,但它们从未真正执行过。他们只是坐在那里闲着。

现在,当我在 pod 中 SSH 运行ning apache 并手动 运行 命令 'php artisan horizon' 时,它实际上执行了所有待处理的作业。

我已经确认了以下几点:

  1. 两个 pods 都连接到相同的 Redis 数据库服务
  2. Horizon pods
  3. 的前缀相同

经过几天的努力,我得到了这个问题的答案。

在 docker 环境中将 Redis 用作缓存、队列或广播代理时,我们需要确保正确定义了以下环境变量,并且它们在所有 pods.

  • CACHE_PREFIX
  • REDIS_PREFIX
  • REDIS_CACHE_DB
  • HORIZON_PREFIX

希望这会帮助其他人尝试使用 Kubernetes 和 Docker.

部署 Laravel 应用程序

就我而言,我需要将我的应用程序环境从 prod 更改为 production

APP_ENV=production

仔细检查您的 APP_ENV 与 horizon.php 配置中的环境之一相匹配。否则 horizon 将不会启动任何队列工作程序。

默认仅提供 localproduction 环境:

https://laravel.com/docs/8.x/horizon#environments

在我的例子中,我将作业添加到“电子邮件”队列中,但是 horizon.php 配置文件没有为 supervisor-1 指定此队列名称:-)