我使用Laravel Forge创建了一个Beanstalk队列,其中包含以下设置:
90 seconds max per job
10 rest seconds when empty
3 maximum tries
production environment
我在我的Laravel 5.2应用程序中运行了一个未正确处理的作业(未为客户创建付款配置文件)。但是,该作业从未添加到我的数据库中的failed_jobs
表中。然后,我跑了几个工作岗位,看看可能发生了什么,这些工作也没有运行。似乎Beanstalk一直试图处理第一份工作而无法克服它转移到下一份工作。我的数据库中的failed_jobs
表中仍然没有作业。
我检查了Forge的队列,它说队列仍在运行。所以我登录telnet
并检查了Beanstalk队列。我做了一个peek-ready
并且看到了第一份没有处理过的工作。但由于3次最大尝试次数设置,它没有处理或失败。它被卡住了。
在此之后,我想我会尝试在Forge中重启我的Beanstalk队列。队列重新启动后,所有已卡住的作业都会成功处理。
我很高兴我能够缓解这个瓶颈,但我很担心,因为我不希望在我的应用程序发生这种情况时发生这种情况。这里可能发生了什么?我该怎么做才能阻止它,或者我如何设置某种警报让我知道队列被卡住?
编辑:
我刚看了/etc/supervisor/conf.d
中队列的设置。一切看起来都很正常,对吧?
[program:worker-49340]
command=php /home/forge/mydomain.com/current/artisan queue:listen beanstalkd --timeout=90 --sleep=10 --quiet --tries=3 --queue="default"
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/home/forge/.forge/worker-49340.log
我还检查了/home/forge/.forge/worker-49340.log
以查看它是否有任何信息,但它是空的。
即使我提供完全相同的输入导致队列卡在第一位,我也无法重现相同的情况。