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

nwlqm0z1  于 2023-01-24  发布在  PHP
关注(0)|答案(6)|浏览(271)

我们在Kubernetes为Laravel应用程序提供了两个不同的Pod,

  • 一个在端口80上运行Apache,(CMD /usr/sbin/apache 2ctl-D前景)
  • 和另一个正在运行的工人(Laravel地平线)(CMD php /var/www/工匠地平线)

问题是当我查看Horizon控制面板时,它显示“活动”,我可以在“待处理作业”部分看到作业,但它们实际上从未执行过,它们只是闲置在那里。
现在,当我在运行apache的pod中手动SSH并运行命令“php artisan horizon”时,它实际上执行了所有挂起的作业。
我已经确保了以下几点:
1.两个pod都连接到同一个Redis数据库服务
1.两个Pod的Horizon前缀相同

o8x7eapl

o8x7eapl1#

仔细检查您的APP_ENV是否与horizon.php配置中的某个环境匹配,否则horizon.php将不会启动任何队列工作器。
默认情况下,仅提供localproduction环境:
https://laravel.com/docs/8.x/horizon#environments

zfciruhq

zfciruhq2#

经过几天的努力,我找到了这个问题的答案。
在Docker环境中使用Redis作为缓存、队列或广播代理时,我们需要确保正确定义以下环境变量,并且它们在所有pod中必须相同。

  • 缓存前缀
  • 检索_前缀
  • REDIS缓存数据库
  • 水平前缀

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

jexiocij

jexiocij3#

就我而言,我需要将应用程序环境从生产更改为生产

APP_ENV=production
6qqygrtg

6qqygrtg4#

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

jhiyze9q

jhiyze9q5#

我只是重新启动Redis服务器

/etc/init.d/redis-server restart
bt1cpqcv

bt1cpqcv6#

如果作业或侦听器向外部服务发送请求,并且无法到达目的主机,并且连接超时值设置为非常大的值,或者作业超时值也设置为很大的值,则作业也可能处于挂起状态足够长的时间,以至于看起来Horizon没有执行它们。

相关问题