Laravel 5.5队列调度不工作
也许我不了解Laravel队列的工作原理,或者它本身不工作,我对Laravel队列/调度的预期行为是,如果调度是从控制器启动的,则调度到队列的代码应该在后台静默执行。最终用户浏览器不必等待代码执行 然而,我的代码就是这样,发送到队列的代码在执行时会让浏览器“旋转…” 这是预期的行为吗?守则:Laravel 5.5队列调度不工作,laravel,queue,laravel-5.5,dispatch,Laravel,Queue,Laravel 5.5,Dispatch,也许我不了解Laravel队列的工作原理,或者它本身不工作,我对Laravel队列/调度的预期行为是,如果调度是从控制器启动的,则调度到队列的代码应该在后台静默执行。最终用户浏览器不必等待代码执行 然而,我的代码就是这样,发送到队列的代码在执行时会让浏览器“旋转…” 这是预期的行为吗?守则: **Controller:** public function make_eps_certs($tbl_eps) { //dd(Carbon::now()->
**Controller:**
public function make_eps_certs($tbl_eps)
{
//dd(Carbon::now()->addMinutes(10))
Log::info('Dispatching maeEPSCert to Queue');
$var_result=makeEPSCerts::dispatch($tbl_eps)->onQueue('eventadmin')
->delay(10);
return redirect()->back();
}
**Job:**
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\partSubs;
use Log;
use Image;
class makeEPSCerts implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
protected $passdata;
public $timeout = 120;
public function __construct($passdata)
{
Log::info('Constructing makeEPSCert');
$this->passdata = $passdata;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
try
{
Log::info('Beginning makeEPSCert');
$tbl_eps=$this->passdata;
.....
将
.env
中的LOG\u驱动程序更改为数据库
,并使用php artisan queue:table
创建所需的迁移文件,然后执行php artisan迁移
之后,您只需运行php artisan queue:work--queue=“eventadmin”
然后你会认识到预期的行为
可以在此处找到更详细的文档:您可以通过以下方式重试(我假设您在Laravel文档中做了说明,但有一天它不起作用):
步骤1:在数据库中删除表“作业”
步骤2:在控制台中运行命令“php artisan migrate”,再次创建表“jobs”
步骤3:在控制台中运行命令“php artisan队列:工作”
步骤4:重试你的应用程序
请注意,在.env文件中,您可以设置:
队列连接=数据库
队列驱动程序=数据库
附言:这对我有用 谢谢,是的,很好用。因此,我的误解是,您需要将php artisan queue:work--queue=“eventadmin”作为侦听器运行,才能使其正常工作?例如,当用户上传视频时,在后台处理视频?@codiiv如果你不想使用命令行,它将无法工作,仅此而已。命令行仅用于创建队列工作程序的实例,当您要启动新的队列工作程序时,由您决定job@Insax看来有办法。我将在测试后更新您,因为您实际上可以通过编程方式运行Artisan命令