// Within the boot method of a service provider
App::bind('processing-job', function ($app) {
return false;
});
Queue::before(function (JobProcessing $event) {
App::bind('processing-job', function ($app) {
return true;
});
});
然后,您可以在任意位置运行检查,如下所示:
App::get('processing-job');
注
运行测试时,如果env var QUEUE_CONNECTION设置为sync,则测试将认为您处于排队进程中。这是因为在同步工作时,您的测试和作业都在同一示例中。
2条答案
按热度按时间gajydyqb1#
只需调用
runningInConsole()
方法:或使用the App facade:
以检查是否正在通过CLI执行。
11dmarpk2#
我有两个解决方案,都在拉腊维尔9号工作。
"第一个"
如果应用程序在队列中运行,则Lavel在服务容器中注册\Illuminate\Queue\CallQueuedHandler,当在控制台中运行或通过Web请求运行时,它不会注册该类。因此,以下检查起作用,并区分队列和在控制台上运行。
"第二个"
当Laravel启动队列作业时,会有一个带有回调的事件,您可以使用该事件在服务容器中附加一些当前正在队列中运行的标志。
然后,您可以在任意位置运行检查,如下所示:
注
运行测试时,如果env var QUEUE_CONNECTION设置为sync,则测试将认为您处于排队进程中。这是因为在同步工作时,您的测试和作业都在同一示例中。