Laravel 异步执行任务

本文介绍了如何在Laravel中使用异步任务队列处理耗时操作,如大文件上传。通过修改.env配置文件,将QUEUE_CONNECTION设置为redis,并创建UploadTask Job,然后在触发位置使用dispatch()函数启动队列。队列任务通过shell_exec执行Excel文件处理命令。为了确保队列在Windows上持续运行,使用vbs和bat脚本实现开机自启。
摘要由CSDN通过智能技术生成

Laravel 异步执行任务 不影响当前程序继续执行

描述

用户操作时 要执行计算量大且不影响主操作的任务时,可采用异步方式执行。
队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和响应的时间

大致操作

  • 生成要执行的文件 php artisan make:job UploadTask
  • .env 中的 QUEUE_CONNECTION=sync 变为 QUEUE_CONNECTION=redis
  • UploadTask文件里写入要执行的任务
  • 启动 任务队列 php artisan queue:work
  • 在触发位置使用 dispatch(new UploadTask()); 开启队列

代码粘贴

app/Jobs/UploadTask.php
<?php

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 Illuminate\Support\Facades\Log;

class UploadTask implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //因为要导入大文件 需要很久时间
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Log::info('UploadTask');
        $command = 'cd ' . base_path() . ' && php artisan ExcelFile ';
        $ret = shell_exec($command);
        Log::info('UploadTask-导入结束'.print_r($ret,true));
    }
}

启动代码摘取
 			$form->saved(function (Form $form) {
                dispatch(new UploadTask());
                return $form->redirect('yyImport','保存成功');
            });

其他操作

因为是个人的电脑 随时会关机 queue就会被停掉 所以使用了windows的开机自启执行vbs

runReadExecelVbs.vbs
set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c I:\yinyue\runReadExecel.bat",vbhide
runReadExecel.bat
cd I:\yinyue
php artisan queue:work
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值