我使用 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
了它是否有任何信息,但它是空的。
即使我提供的输入与最初导致队列卡住的输入完全相同,我目前也无法重现相同的情况。