Laravel 队列:提升应用性能的 Bus 和 Chn
Laravel 队列用于处理耗时的后台任务,从而提升应用性能。核心概念是 Bus 和 Chain,它们赋予作业控制和链接能力。本文将深入探讨如何利用 Bus 和 Chain 在 Laravel 中构建高效的执行流程。
Laravel Bus:并行执行多个作业
Bus 允许同时调度多个作业,无需特定执行顺序。每个作业独立处理。
示例:
<?php use AppJobsProcessOrder; use AppJobsSendNotification; use IlluminateSupportFacadesBus; Bus::batch([ new ProcessOrder($orderId), new SendNotification($userId) ])->dispatch();
登录后复制
Bus 的优势:
- 并行运行独立任务。
- 集成 Bus::batch(),实现多个作业的并行执行。
- 监控批处理作业。
Laravel 支持使用 Bus::batch() 监控和处理作业批次。
示例:
<?php Bus::batch([ new ProcessOrder($orderId), new SendNotification($userId) ])->then(function (Batch $batch) { Log::info('所有批处理作业已完成。'); })->catch(function (Batch $batch, Throwable $e) { Log::error('批处理作业错误:' . $e->getMessage()); })->dispatch();
登录后复制
Laravel Chain:串行执行作业
Chain:
Chain 定义一系列作业的执行顺序,确保只有前一个作业成功完成后,下一个作业才会运行。
示例:
<?php use AppJobsProcessPayment; use AppJobsGenerateInvoice; use AppJobsSendEmailReceipt; use IlluminateSupportFacadesBus; Bus::chain([ new ProcessPayment($orderId), new GenerateInvoice($orderId), new SendEmailReceipt($userId) ])->dispatch();
登录后复制
支持条件工作流:
Chain 确保作业按顺序执行,适用于需要特定顺序流程的场景。
处理 Chain 中的失败:
如果 Chain 中的作业失败,后续作业将不会执行。为了避免这种情况,可以定义错误处理机制。
示例:
<?php Bus::chain([ new ProcessPayment($orderId), new GenerateInvoice($orderId), new SendEmailReceipt($userId) ])->catch(function (Throwable $e) { Log::error('队列处理错误:' . $e->getMessage()); })->dispatch();
登录后复制
弹性作业:
为了确保弹性,可以为失败的作业配置自动重试:
<?php class ProcessPayment implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public $tries = 3; public $backoff = 10; // 重试间隔时间 (秒) }
登录后复制
总结:
- 使用 Chain 进行顺序执行。
- 使用 Bus 进行并行调度多个作业。
- 处理失败并实现自动重试机制。
Laravel 队列通过处理耗时任务,提升应用性能,优化用户体验。
以上就是拉维尔队列:巴士与链条的详细内容,更多请关注php中文网其它相关文章!