Categories
php

laravel 异步任务

在 Laravel 中,使用 php artisan queue 创建并执行异步任务的完整流程如下:


1. 配置队列驱动

在 .env 文件中设置队列驱动(如 databaseredissqs 等):env复制下载

QUEUE_CONNECTION=database

如果需要使用 database 驱动,需先创建 jobs 表:bash复制下载

php artisan queue:table
php artisan migrate

2. 创建异步任务(Job)

使用 Artisan 生成一个 Job 类:bash复制下载

php artisan make:job ProcessPodcast

3. 分发任务(Dispatch Job)

在控制器或 CLI 命令中调用 Job:php复制下载

use App\Jobs\ProcessPodcast;

// 分发任务到队列
ProcessPodcast::dispatch($podcastData);

// 延迟执行(5秒后运行)
ProcessPodcast::dispatch($podcastData)->delay(now()->addSeconds(5));

// 指定队列(如 "high" 优先级队列)
ProcessPodcast::dispatch($podcastData)->onQueue('high');

// 传输参数例子
ImportSCEyeScreeningBatRoaster::dispatch($task->id,$EyeScreeningBatID,$path,Admin::user());

4. 启动队列 Worker

运行队列处理器:bash复制下载

php artisan queue:work

常用选项:

选项说明
--queue=high,default优先处理 high 队列
--tries=3失败任务重试次数
--timeout=60任务超时时间(秒)
--daemon守护进程模式(生产环境推荐)

5. 任务执行流程

  1. 任务入队
    • dispatch() 将任务序列化后存入 jobs 表(database 驱动)。
  2. Worker 监听队列
    • queue:work 从队列中取出任务并反序列化。
  3. 执行 handle() 方法
    • 运行 Job 类中的业务逻辑。
  4. 任务完成/失败
    • 成功:任务从队列删除。
    • 失败:任务进入 failed_jobs 表(需配置)。