🗣 Wd提问: 程序PHP Laravel队列
🤖 Ai回答: PHP Laravel 队列是一个强大的后台任务处理工具,用于将耗时的操作(如发送邮件、处理图片、生成报告等)推迟到稍后执行,从而提高应用的响应速度。
核心概念
1、 Job (作业):一个包含任务逻辑的独立类。例如,`SendEmailJob`。
2、 Queue (队列):一个存放待处理作业的列表(如 emails, processing)。作业遵循先进先出(FIFO)的原则。
3、 Worker (工作进程):一个持续运行的进程,负责监听队列并取出作业来执行。
基本使用步骤
1、配置队列
首先,在 `.env` 文件中配置队列驱动。Laravel 支持多种驱动,如 `database`, `redis`, `sqs`, `beanstalkd`。对于初学者,使用 `database` 驱动最简单。
dotenv
.env
QUEUE_CONNECTION=database
然后,生成队列所需的数据表。
bash
生成队列任务和失败任务的数据表迁移文件
php artisan queue:table
php artisan queue:failed-table
执行迁移,创建表
php artisan migrate
2、创建作业类
使用 Artisan 命令创建一个新的作业类。
bash
php artisan make:job ProcessPodcast
这会在 `app/Jobs/` 目录下生成 `ProcessPodcast.php` 文件。编辑这个文件:
php
<?php
namespace App\Jobs;
use App\Models\Podcast;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ProcessPodcast implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/
* podcast 实例
*
* @var \App\Models\Podcast
*/
protected $podcast;
/
* 创建一个新的任务实例。
*
* @param \App\Models\Podcast $podcast
* @return void
*/
public function __construct(Podcast $podcast)
{
$this-podcast = $podcast;
}
/
* 执行任务。
*
* @return void
*/
public function handle()
{
// 执行耗时操作,例如处理音频
// sleep(5);
// $this-podcast-processed = true;
// $this-podcast-save();
}
}
`__construct()` 方法用于接收任务所需的数据(如模型实例)。
`handle()` 方法包含任务的核心逻辑。
3、分派作业
在控制器或其他业务逻辑中,将任务分派到队列中。
php
<?php
namespace App\Http\Controllers;
use App\Jobs\ProcessPodcast;
use App\Models\Podcast;
use Illuminate\Http\Request;
class PodcastController extends Controller
{
public function store(Request $request)
{
// 创建 podcast
$podcast = Podcast::create($request-all());
// 将任务分发到默认队列
ProcessPodcast::dispatch($podcast);
// 或者,指定队列和延迟
// ProcessPodcast::dispatch($podcast)
// -onQueue('processing')
// -delay(now()-addMinutes(10));
return response()-json(['message' = 'Podcast created and will be processed.']);
}
}
当 `ProcessPodcast::dispatch($podcast)` 被调用时,任务会被序列化并存入 `jobs` 数据表中。
4、运行队列工作进程
要执行队列中的任务,你需要启动一个工作进程。
bash
启动队列工作进程,它会一直运行并处理任务
php artisan queue:work
在生产环境中,你需要使用进程管理工具(如 Supervisor)来确保 `queue:work` 进程在崩溃或系统重启后能自动重启。
常用命令
`php artisan queue:work`:启动工作进程,处理任务。
`php artisan queue:listen`:与 `work` 类似,但会在每次处理后重启进程,开发时更方便,但性能较低。
`php artisan queue:failed`:列出所有失败的任务。
`php artisan queue:retry {id}`:重新执行一个失败的任务。
`php artisan queue:forget {id}`:删除一个失败的任务。
`php artisan queue:flush`:清空所有失败的任务。
高级特性
任务链:按顺序执行一系列任务。
php
ProcessPodcast::dispatch($podcast)
-chain([
new OptimizePodcast,
new ReleasePodcast,
]);
任务中间件:允许任务在执行前通过一些中间层进行过滤或处理。
失败任务处理**:当任务超过重试次数后,会被记录到 `failed_jobs` 表中,方便后续排查和手动重试。
通过使用 Laravel 队列,可以显著优化 Web 应用的性能和用户体验。
📣 商家广告 :
👍
0
👎
IP地址: 208.110.182.70
搜索次数: 0
提问时间: 2025-11-12 18:43:31
🛒 域名购买 :
m.tj.cn 43.gold 46.hk 05.gold 59.gold 827.net.cn 887.net.cn lv.gs 65.hk lytxw.com
❓️ 热门提问 :
SSL证书代理独立服务器 ip地址是怎么分配的 韩国vps公司 vir vps ip伴手礼 静态香港ip 多线idc机房 如何配置vps vps如何用 CMS建站网站优化 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
a.zj.cn axgr.cn usjv.cn aaaa.gd.cn jmum.cn kpya.cn v.sn.cn zong.org.cn drone.fj.cn deepseek.red
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
sökmotor
Search website
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。