用途
Laravel Queue Patterns 是一份面向 Laravel 队列(Queue)的最佳实践参考,用于指导开发者编写结构清晰、可重试、可测试的异步任务(Job)。内容以代码示例为主,覆盖从任务定义到测试的完整流程。
主要能力
任务结构
任务类实现 ShouldQueue 接口,并使用 Dispatchable、InteractsWithQueue、Queueable、SerializesModels 等标准 trait。构造函数通过只读属性接收可序列化数据(如 Eloquent 模型),handle() 方法注入依赖(如 PaymentGateway)执行实际逻辑,failed() 方法处理失败后的清理与通知。
分发模式
支持标准分发、指定队列与连接、延迟分发、条件分发(dispatchIf / dispatchUnless),以及在数据库事务提交后分发(afterCommit)。示例明确指出在事务内直接分发任务可能导致任务在提交前执行,推荐使用 afterCommit 保证安全。
任务中间件
通过 middleware() 方法配置 RateLimited(速率限制)、WithoutOverlapping(防止重叠执行,可设置 releaseAfter 与 expireAfter)、ThrottlesExceptions(异常节流,可设置 backoff)。速率限制器在 AppServiceProvider 中通过 RateLimiter::for 定义。
链式调用
使用 Bus::chain 实现顺序执行,前一个任务成功后才运行下一个,并可通过 catch 回调处理失败。
批处理
使用 Bus::batch 实现并行独立任务,支持 then(全部成功)、catch(首个失败)、finally(无论成败)回调,以及 name、onQueue、allowFailures 配置。可通过 Bus::findBatch 查询进度。批处理中的任务必须使用 Illuminate\Bus\Batchable trait。
唯一任务
实现 ShouldBeUnique 接口,可设置 uniqueFor 时长与自定义 uniqueId,防止重复任务。
重试策略
支持固定尝试次数($tries)、时间限制重试(retryUntil)、最大异常数($maxExceptions)、指数退避($backoff 数组)、单次超时($timeout),以及通过 $this->fail() 立即标记不可恢复错误。
幂等性模式
通过检查已处理状态、使用原子更新(whereNull 条件更新并检查影响行数)防止重复处理。
队列测试
使用 Queue::fake 与 Bus::fake 断言任务已分发、链式调用、批处理;使用 dispatchSync 同步执行任务以测试处理逻辑。
使用方式
该技能以代码片段形式呈现,开发者可直接参考示例编写任务类、配置中间件与重试策略,并按照清单逐项检查。
适用场景
适用于使用 Laravel 框架开发异步任务处理的场景,包括支付处理、订单流程、CSV 导入、Webhook 处理、报表重算等。
限制
资料未提供该技能的安装命令、版本要求、收费信息或具体平台支持范围,这些内容暂未提供。