Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 5.5队列调度不工作_Laravel_Queue_Laravel 5.5_Dispatch - Fatal编程技术网

Laravel 5.5队列调度不工作

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()->

也许我不了解Laravel队列的工作原理,或者它本身不工作,我对Laravel队列/调度的预期行为是,如果调度是从控制器启动的,则调度到队列的代码应该在后台静默执行。最终用户浏览器不必等待代码执行

然而,我的代码就是这样,发送到队列的代码在执行时会让浏览器“旋转…”

这是预期的行为吗?守则:

    **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命令