php – Laravel Artisan CLI安全地停止守护程序队列工作者

为了处理大量的工作,我运行可变数量的队列工作者,具体取决于完成的工作量.我不想在完成我们认为合适的时间段内完成需要完成的工作之外运行更多的工人.

目前,我启动了5个守护程序队列工作程序用于测试目的,但是在生产中,这个数字可能介于25和25之间. 100名工人,可能更多.我知道在部署时,我必须首先通过使用php artisan down将框架置于维护模式来停止队列工作,因为–daemon标志导致框架仅在工作程序启动时加载,因此新代码不会在部署期间生效,直到工作人员重新启动.

如果我出于某种原因需要停止工作,我可以使用php artisan将应用程序置于维护模式,这将导致工作人员在完成当前工作(如果他们正在工作)工作后死亡.但是,有时我可能会在不将整个应用程序置于维护模式的情况下杀死工作人员.

有没有一种安全的方法来阻止工人继续处理他们当前的工作,然后在不将整个应用程序置于维护模式的情况下死亡?

基本上我需要的是一个php工匠队列:stop,其行为类似于php artisan队列:restart,但在作业完成后不会重新启动worker.

我在那里期待有一个像php工匠队列:停止命令,这样做,但似乎并非如此.

使用ps aux | grep php我能够为工作者获取进程ID,并且我可以通过这种方式终止进程,但我不想在处理作业的过程中终止进程.

谢谢.

解决方法:

我们已经在我们的应用程序中实现了类似的东西 – 但它并不是Laravel本身内置的东西.您必须通过向if块添加另一个条件来编辑this file,以便它可以调用stop函数.您可以通过在Worker类中设置一个静态变量来执行此操作,无论何时运行您必须执行的自定义命令(即php artisan queue:pause),或者通过在某处检查原子值(即将其设置为一些缓存,如redis,memcached,APC甚至MySQL,虽然这意味着你将使用相同的自定义命令设置这个while循环的每个循环一个MySQL查询.

上一篇:php – SQLSTATE [HY000] [2002]连接在Laravel宅基地内被拒绝


下一篇:PHP Artisan Tinker从任何命令崩溃