2026/4/10 13:04:04
网站建设
项目流程
如何做好网站首页,网站建设项目描述,广州黄埔区建设局网站局,看希岛爱理做品的网站一、基础信息与前置准备topthink/think-queue 是 ThinkPHP 官方队列扩展#xff0c;支持多种驱动#xff08;Redis、Database、Sync、Beanstalkd 等#xff09;#xff0c;用于实现任务异步执行#xff0c;如短信发送、邮件推送、数据批量处理等#xff0c;有效解决高并发…一、基础信息与前置准备topthink/think-queue是 ThinkPHP 官方队列扩展支持多种驱动Redis、Database、Sync、Beanstalkd 等用于实现任务异步执行如短信发送、邮件推送、数据批量处理等有效解决高并发下的请求阻塞问题。前置准备安装扩展以 Composer 为例composer require topthink/think-queue生成配置文件安装完成后会自动在 config/ 目录下生成 queue.php 配置文件所有核心参数均在该文件中配置。二、核心参数说明队列扩展参数分为全局配置参数config/queue.php和任务投递/消费参数代码中使用两类。1. 全局配置参数config/queue.php该文件返回一个数组核心参数如下return [ default redis, // 默认队列驱动可选redis/database/sync/beanstalkd connections [ // 1. Redis 驱动配置最常用重点说明 redis [ type redis, // 驱动类型 queue default, // 默认队列名称 host 127.0.0.1, // Redis 主机 port 6379, // Redis 端口 password , // Redis 密码 select 0, // Redis 数据库索引 timeout 0, // Redis 连接超时时间秒 persistent false, // 是否启用持久化连接 prefix think:queue:, // Redis 键前缀避免冲突 ], // 2. 数据库驱动配置无 Redis 时使用依赖数据表 database [ type database, queue default, table jobs, // 队列数据表名需手动创建 connection null, // 默认使用项目数据库配置 ], // 3. 同步驱动配置仅测试用不异步 sync [ type sync, ], ], failed [ // 失败任务存储配置 type database, // 可选database/redis table failed_jobs, // 失败任务数据表名 ], ];2. 任务投递 / 消费核心参数场景参数名说明可选值 / 默认值任务投递queue指定任务投递到的队列名称自定义默认default任务投递delay延迟执行时间秒正整数默认0任务消费tries任务最大重试次数正整数默认0任务消费backoff重试间隔时间秒正整数/数组默认0任务消费timeout单个任务执行超时时间秒正整数默认无限制三、完整使用示例以 Redis 驱动为例步骤 1准备工作确保 Redis 服务已启动并可连接确认 config/queue.php 中 default 已设为 redis步骤 2创建队列任务类在 app/job/ 目录下创建任务类如无 job 目录请手动创建示例SendSms.php短信发送任务?php namespace app\job; use think\queue\Job; class SendSms { /** * 队列任务执行方法必须实现核心逻辑 */ public function fire(Job $job, array $data) { $phone $data[phone] ?? ; $content $data[content] ?? ; // 执行业务逻辑模拟短信发送 $isSuccess $this-doSendSms($phone, $content); if ($isSuccess) { $job-delete(); echo 短信发送成功手机号{$phone}任务已删除\n; } else { if ($job-attempts() 3) { $job-failed($data); echo 短信发送失败手机号{$phone}已达最大重试次数标记为失败任务\n; $job-delete(); } else { $job-release(5); // 5 秒后重试 echo 短信发送失败手机号{$phone}将在 5 秒后重试当前重试次数{$job-attempts()}\n; } } } /** * 任务失败后的回调方法可选 */ public function failed(array $data) { $phone $data[phone] ?? ; file_put_contents(./sms_failed.log, 【.date(Y-m-d H:i:s).】手机号{$phone}短信发送最终失败\n, FILE_APPEND); } /** * 模拟短信发送逻辑 */ private function doSendSms(string $phone, string $content): bool { if (empty($phone) || empty($content)) { return false; } // 随机返回成功/失败用于测试重试逻辑 return rand(0, 1) 1; } }步骤 3投递队列任务在控制器或路由中调用将任务投递到队列。示例app/controller/Index.php?php namespace app\controller; use app\job\SendSms; use think\facade\Queue; class Index { public function sendSms() { $taskData [ phone 13800138000, content 【测试】您的验证码是 123456有效期 5 分钟 ]; // 方式 1默认队列立即执行 $jobId1 Queue::push(SendSms::class, $taskData); // 方式 2指定队列延迟执行投递到 sms 队列延迟 10 秒 $jobId2 Queue::push(SmsSend::class, $taskData, sms, 10); // 方式 3helper 函数投递等效于方式 1 // $jobId3 queue_push(SendSms::class, $taskData); if ($jobId1 $jobId2) { return json([code 200, msg 任务已成功投递到队列, job_id1 $jobId1, job_id2 $jobId2]); } else { return json([code 500, msg 任务投递失败]); } } }步骤 4启动队列消费者执行任务通过命令行在项目根目录执行以下命令启动消费者监听队列并执行任务基本命令监听默认队列php think queue:work常用进阶命令监听指定队列如 sms 队列php think queue:work --queuesms后台运行生产环境避免进程终止nohup php think queue:work --queuesms /dev/null 21 指定最大重试次数如 3 次php think queue:work --tries3持续监听队列无任务时不退出推荐生产环境php think queue:listen --queuesms --tries3步骤 5查看执行结果访问控制器方法如 http://你的域名/index/sendSms投递任务查看命令行终端输出前台运行 queue:work 时可见任务执行/重试/失败日志若任务最终失败可查看 ./sms_failed.log 或 failed_jobs 数据表需先创建步骤 6失败任务处理创建失败任务数据表使用 ThinkPHP 迁移命令# 生成迁移文件 php think migrate:create create_failed_jobs_table # 推荐直接创建队列相关数据表包含 jobs 和 failed_jobs php think queue:table php think migrate:run重新执行失败任务指定任务 IDphp think queue:retry 1 # 1 为 failed_jobs 表中的 id清空所有失败任务php think queue:flush四、功能汇总与总结1. 核心功能功能点说明适用场景异步任务执行将耗时任务投递到队列消费者后台执行不阻塞前端请求短信/邮件发送、数据批量导入导出、订单状态同步多驱动支持支持 Redis、Database、Sync、Beanstalkd 等驱动开发测试、无 Redis 环境、生产高可用任务延迟执行支持延迟时间后执行任务订单超时关闭、定时推送通知任务重试机制任务失败后支持自定义重试次数和间隔网络波动导致的接口调用失败失败任务存储记录最终失败任务支持重试和查询排查失败原因、恢复重要任务多队列隔离支持多个队列不同业务任务独立消费区分核心/非核心业务避免互相阻塞2. 常用辅助功能任务优先级通过不同队列实现优先消费核心队列如 payment 优先于 notice任务超时控制避免单个任务长时间占用资源后台运行支持 nohup 或 supervisor 守护进程确保消费者持续运行任务删除执行成功的任务自动/手动删除避免重复执行3. 生产环境注意事项推荐使用Redis 驱动性能优于 Database 驱动使用 supervisor 代替 nohup 守护消费者进程避免进程意外退出合理设置任务重试次数和重试间隔避免无效重试占用资源定期清理失败任务和过期任务避免存储溢出总结topthink/think-queue 核心在于实现异步任务执行核心配置在 config/queue.php支持多驱动。核心流程为创建任务类 → 投递任务 → 启动消费者执行任务任务类需实现 fire() 方法。关键功能包括延迟执行、重试机制、失败任务存储生产环境推荐 Redis 驱动 Supervisor 守护。