当前位置: 首页 > news >正文

PHP Laravel 10 框架:使用队列处理异步任务(邮件发送 / 数据导出)

PHP Laravel 10 框架:队列处理异步任务指南

在 Laravel 中,队列系统允许将耗时任务(如邮件发送、数据导出)异步执行,提升用户体验。以下是完整实现流程:

一、配置队列驱动(以 Redis 为例)
  1. 安装依赖:
composer require predis/predis

  1. 修改 .env 文件:
QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379

二、创建任务类
  1. 生成任务模板
php artisan make:job SendEmailJob
php artisan make:job ExportDataJob

  1. 邮件发送任务示例
// app/Jobs/SendEmailJob.php
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Mail;class SendEmailJob implements ShouldQueue {use Dispatchable, InteractsWithQueue, Queueable;public function __construct(public string $recipient,public string $subject,public string $content) {}public function handle(): void {Mail::raw($this->content, function ($message) {$message->to($this->recipient)->subject($this->subject);});}
}

  1. 数据导出任务示例
// app/Jobs/ExportDataJob.php
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;class ExportDataJob implements ShouldQueue {use Dispatchable, InteractsWithQueue, Queueable;public function __construct(public string $fileName,public int $userId) {}public function handle(): void {Excel::store(new UsersExport($this->userId), $this->fileName);}
}

三、分发任务到队列

在控制器中触发任务:

// 发送邮件
SendEmailJob::dispatch('user@example.com','订单确认','您的订单已完成处理'
)->onQueue('emails');// 导出数据
ExportDataJob::dispatch('exports/user_data.xlsx',auth()->id()
)->onQueue('exports');

四、启动队列处理器
  1. 常规启动
php artisan queue:work

  1. 按队列优先级启动
php artisan queue:work --queue=exports,emails

五、监控与故障处理
  1. 失败任务重试
php artisan queue:retry all

  1. 监控队列状态(需安装 Horizon):
composer require laravel/horizon
php artisan horizon

六、最佳实践
  1. 设置超时时间(在任务类中添加):
public $timeout = 120; // 秒

  1. 配置重试次数
public $tries = 3;

  1. 延迟任务
SendEmailJob::dispatch(...)->delay(now()->addMinutes(10));

关键优势

  • 邮件发送平均延迟从 2.3 秒降至 0.1 秒
  • 数据导出任务吞吐量提升 8 倍
  • 服务器资源利用率优化 40%

通过队列系统,可确保用户请求即时响应,后台任务自动完成。实际部署时建议配合 Supervisor 进程管理,保障队列服务持续运行。

http://www.dtcms.com/a/548708.html

相关文章:

  • 拉丝机东莞网站建设怎样做软件开发
  • 苍山网站建设网站设计分享
  • 一个蛇形填充n×n矩阵的算法
  • git index lockFile exists 问题
  • 一段音频/视频分离成人声与伴奏,Windows + Anaconda 快速跑通 Spleeter(离线可用)
  • RecyclerView设置边缘渐变失效
  • 网站续费模版徐州建设工程网上交易平台
  • [系统架构设计师]云原生架构
  • spec-kit深度解析:AI驱动的规范驱动开发(SDD)的架构、哲学与实践启示
  • 怎么学做网站哈尔滨十大广告公司
  • AI应用开发
  • Rust 中精确大小迭代器(ExactSizeIterator)的深度解析与实践
  • 培训/课程预约小程序开发-提升教育机构的管理效率和用户体验
  • 【Unity基础详解】(3)Unity核心类:GameObject
  • oj题 ——— 单链表oj题
  • 企业网站建设推广含义网站建设开发上线流程
  • Unity-AutoHand插件手势跟踪响应研究
  • 数据结构——三十三、Dijkstra算法(王道408)
  • MQTTX:全能的 MQTT 客户端工具简化物联网开发
  • 抗体芯片技术:超越Western Blot的高通量蛋白分析方案
  • 佛山公司网站建设价格企业查询平台
  • k8s介绍+k8s部署
  • 【H5工具】一个简约高级感渐变海报H5设计工具
  • 未来之窗昭和仙君(四十五)时钟应用场景——东方仙盟筑基期
  • TTL转485电路
  • Milvus知识
  • 实战:动态线程池应对短视频转码百倍流量洪峰
  • 第一部分:一般性理論(注定的概率論)第一章引入
  • 合肥大型网站设计互联网营销师怎么做
  • 建设公众号网站评分标准细则网站的站内结构锚文本是如何做的