大家好,我有项目上laravel 9一切工作得很好,到目前为止,我有队列作业,当我这样做
它运行良好,它清除作业表后,finsh现在我的问题是,当我运行php工匠队列:工作在php文件中,像这样
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Twilio\Rest\Client;
use Illuminate\Support\Facades\Http;
class General_controller extends Controller
{
public function test()
{
Artisan::call('queue:work');
}
}
它的工作,但它没有清除作业表,所以当我再次运行命令,它做了同样的工作一次又一次等
1条答案
按热度按时间o3imoua41#
问题是您在一个控制器方法中调用queue:workartisan命令。当您调用queue:work命令时,它将启动一个工作线程,该线程侦听队列上的新作业并处理它们。在控制器方法中运行它是没有意义的,因为它是一个长时间运行的进程,用于监听作业并在它们进入时进行处理。
在您的例子中,如果您想在调用测试方法时处理队列,可以在queue:work命令中添加**--once**。这将只处理队列中的下一个作业,然后退出。* 请注意,仍应谨慎使用此方法,并且不推荐使用此方法处理排队作业。最佳实践是让队列worker在服务器的后台运行。*
另外:如果你在本地主机上使用artisan服务。它只有一个线程,不能从请求中启动另一个命令。