跳转到主要内容
约 2 分钟阅读

异步队列系统 (Queues)

在处理耗时任务(例如生成 PDF 报告、发送欢迎邮件、调用远程 AI API)时,直接同步响应会拖慢用户体验。Laravel 队列系统允许将这些耗时操作推迟到后台异步执行。

创建队列任务

php artisan make:job ProcessPodcast
namespace App\Jobs;

use App\Models\Podcast;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;

class ProcessPodcast implements ShouldQueue
{
    use Queueable;

    public function __construct(public Podcast $podcast) {}

    public function handle(): void
    {
        // 处理音频转码或 AI 文本生成...
    }
}

分发任务至队列

use App\Jobs\ProcessPodcast;

// 立即分发至默认队列
ProcessPodcast::dispatch($podcast);

// 延迟 10 分钟后执行
ProcessPodcast::dispatch($podcast)->delay(now()->addMinutes(10));

// 指定分发到高优先级队列
ProcessPodcast::dispatch($podcast)->onQueue('high');

运行队列工作进程

# 启动队列监听器
php artisan queue:work --queue=high,default