Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能

3次阅读

laravel任务队列可将耗时操作 异步 处理,提升性能;1. 配置 QUEUE_CONNECTION=redis 并启动 redis;2. 使用php artisan make:job 创建任务类并在 handle 中编写逻辑;3. 用 dispatch 分发任务,支持 delay 延迟和 onQueue 指定队列;4. 运行 php artisan queue:work 启动监听器,建议配合 Supervisor 管理进程;5. 执行 php artisan queue:failed-table 记录失败任务,通过 queue:failed 查看、queue:retry 重试;6. 可使用 闭包 任务处理简单逻辑,但需注意序列化限制。合理配置驱动、任务与监听是关键。

Laravel 任务队列怎么用_Laravel Queues 异步处理任务提升应用性能

Laravel 任务队列让你可以把耗时操作放到后台异步执行,比如发送邮件、处理图片、调用第三方 接口 等。这样用户请求能快速响应,提升应用性能和用户体验。核心思路是把任务“推”到队列里,再由工作进程(worker)慢慢“拉”出来处理。

1. 配置队列驱动

Laravel 支持多种队列驱动:sync(同步,用于开发)、database数据库)、redis、beanstalkd、sqs 等。生产环境推荐使用redis 或 database。

修改 .env 文件设置默认驱动:

QUEUE_CONNECTION=redis

确保已安装并启动 Redis 服务。若用 database 驱动,需生成数据表:

php artisan queue:table
php artisan migrate

2. 创建任务类

使用 Artisan 命令生成任务:

php artisan make:job SendWelcomeEmail

在生成的 app/Jobs/SendWelcomeEmail.php 中定义逻辑:

public function handle() { // 发送邮件逻辑 Mail::to($this->user)->send(new WelcomeMail()); }

3. 分发任务到队列

在控制器或其他地方分发任务:

dispatch(new SendWelcomeEmail($user));

也可以链式调用控制行为:

  • delay(60) —— 延迟 60 秒执行
  • onQueue(’emails’) —— 指定队列名称
  • onConnection(‘redis’) —— 指定连接

例如:

dispatch((new SendWelcomeEmail($user))->delay(30)->onQueue(‘notifications’));

4. 启动队列监听器

运行以下命令启动消费者进程:

php artisan queue:work

建议配合进程管理 工具 如 Supervisor,确保队列常驻运行。Supervisor 配置示例:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/artisan queue:work –sleep=3 –tries=3
autostart=true
autorestart=true
user=www-data
numprocs=4

5. 处理失败任务

创建失败任务记录表:

php artisan queue:failed-table
php artisan migrate

开启失败任务捕获后,可用命令查看和重试:

php artisan queue:work –tries=3 // 最多重试 3 次
php artisan queue:failed // 查看失败任务
php artisan queue:retry all // 重试所有失败任务

6. 使用闭包任务(临时任务)

适合简单逻辑,无需创建完整任务类:

dispatch(function () {
Log::info(‘Closure job executed.’);
})->onQueue(‘default’);

注意:闭包任务需序列化,不能包含匿名函数或 对象 引用限制。

基本上就这些。合理使用 Laravel 队列,能把阻塞操作移出主请求流,显著提升响应速度和系统稳定性。关键是选对驱动、写好任务、配好监听。

以上就是 Laravel 任务队列怎么用_Laravel Queues 异步处理任务提升应用性能的详细内容,更多请关注 php 中文网其它相关文章!

站长
版权声明:本站原创文章,由 站长 2025-12-20发表,共计1741字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
1a44ec70fbfb7ca70432d56d3e5ef742
text=ZqhQzanResources