7

我们的 Laravel 应用程序在 Kubernetes 中有两个不同的 pod,

  • 一个在端口 80 上运行的 apache,(CMD /usr/sbin/apache2ctl -D FOREGROUND)
  • 和另一个正在运行的工作人员(Laravel Horizo​​n)(CMD php /var/www/artisan horizo​​n)

问题是当我检查地平线仪表板时,它显示“活动”,我可以在“待定作业”部分看到作业,但它们从未真正执行。他们只是无所事事地坐在那里。

现在,当我在运行 apache 的 pod 中进行 SSH 并手动运行命令“php artisan horizo​​n”时,它实际上会执行所有待处理的作业。

我已经确保了以下几点:

  1. 两个 pod 都连接到同一个 Redis 数据库服务
  2. 两个 pod 的 Horizo​​n 前缀相同
4

4 回答 4

8

仔细检查您APP_ENV在 Horizo​​n.php 配置中的匹配环境之一。否则,horizo​​n 不会启动任何队列工作者。

默认情况下,仅local提供production环境:

https://laravel.com/docs/8.x/horizo​​n#environments

于 2021-04-20T07:37:37.170 回答
5

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

在 docker 环境中使用 Redis 作为缓存、队列或广播代理时,我们需要确保正确定义了以下环境变量,并且它们在所有 pod 中必须相同。

  • CACHE_PREFIX
  • REDIS_PREFIX
  • REDIS_CACHE_DB
  • HORIZON_PREFIX

希望这将有助于其他尝试使用 Kubernetes 和 Docker 部署 Laravel 应用程序的人。

于 2020-06-07T09:17:40.447 回答
4

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

APP_ENV=production
于 2021-03-18T20:04:54.233 回答
0

在我的情况下,我将作业添加到“电子邮件”队列中,但是 Horizo​​n.php 配置文件没有为 supervisor-1 指定这个队列名称 :-)

于 2021-09-14T23:18:56.437 回答