【问题标题】:Laravel Horizon not executing pending jobs - Kubernetes and Docker environmentLaravel Horizo​​n 不执行挂起的作业 - Kubernetes 和 Docker 环境
【发布时间】:2020-09-25 22:18:53
【问题描述】:

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

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

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

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

我已经确保了以下几点:

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

【问题讨论】:

  • 我认为你应该用supervisor运行它,在容器中安装一个supervisor然后执行容器看看会发生什么。
  • @AdnanMumtaz 我试过了,但没有任何改变。

标签: php laravel docker kubernetes laravel-horizon


【解决方案1】:

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

默认只提供localproduction 环境:

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

【讨论】:

  • 就我而言,我使用的是 PRODUCTION 而不是 production - 所以请记住它区分大小写。
【解决方案2】:

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

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

  • CACHE_PREFIX
  • REDIS_PREFIX
  • REDIS_CACHE_DB
  • HORIZON_PREFIX

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

【讨论】:

  • 我遇到了同样的问题。你用的是什么类型的redis?我们正在尝试企业版。似乎没有工作。还有什么我应该检查的。 API 和 Horizo​​n “队列工作者” pod 上的环境变量完全相同
  • @aibarra ,我知道它真的很晚了,希望你可能已经想通了。只是为了回答你,我认为 Redis 的类型并不重要,直到或除非你的所有应用程序(所有微服务)都在与同一个 Redis 实例通信。如果你已经有了解决方案,如果你能在这里分享它会很棒,它可以帮助其他人。谢谢!
  • 我们正要遇到这个问题,我偶然发现了这篇文章,对策略提出了很多建议,谢谢
  • 好点也在 config/database.php 我们需要为 CACHE、EVENT、SESSION 和 HORIZON 放置单独的 REDIS_DB
  • 哇,谢谢我从 .env 中删除了依赖默认配置的那些,现在我知道它们必须保留!!!
【解决方案3】:

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

APP_ENV=production

【讨论】:

  • 就我而言,我使用的是 PRODUCTION 而不是 production - 所以请记住它区分大小写。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 2020-10-29
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多