Laravel 消息队列实战
课程简介
首先需要声明的是,本系列教程整理自 Laravel Queue In Action,不过学院君会针对表述、场景、案例及部署环境做调整,不是逐字翻译,有条件的同学可以去购买这本电子书对作者进行支持,我觉得国外值得购买的付费 Laravel 资源,首推 Laracasts 订阅会员,其次就是这本电子书了。
书归正传,我们知道,PHP 串行化代码执行的可预测性和简单易上手使其一度成为后端 Web 开发世界中最受欢迎的语言(此处应该有口号:PHP 是世界上最好的语言~),但是多年来,编写在多个进程中执行业务逻辑的 PHP 程序是非常困难的,直到 Laravel 的出现及其支持的队列功能。
Swoole 是另一个解决方案了,这里以 PHP-FPM 驱动的 PHP Web 应用为讨论场景。
如果你在 Laravel 之前使用过基于 PHP 的队列系统,你已经知道 Laravel 的队列系统所带来的价值,Laravel 队列系统的简单性让开发者更容易受益于通过队列处理器进程在后台做额外的工作,同时让 HTTP 前台应用有足够的敏捷性来服务更多的客户。
关于 Laravel 队列系统的基本概念、组成部件和实现原理,学院君已经在基于 Redis 实现 Laravel 消息队列系统及底层源码探究 这篇教程中说的很清楚了,所以这个系列将直接从使用场景开始,重点介绍消息队列在 Laravel 项目中的使用案例和线上运维,如果你觉得有点突兀,可以先去阅读这篇教程。
本系列教程的目录索引如下:
先导篇
使用实例
- 发送邮箱验证消息
- 队列优先级
- 重试失败任务
- 取消已放弃的订单
- 发送 Webhook 实现跨应用异步回调
- 取消会议及自动退款处理
- 通过幂等设计和原子锁避免重复退款
- 通过队列批处理退款订单
- 监控退款任务批处理过程
- 异步处理会议门票支付及竞态条件处理
- 业务流程峰值检测和数据一致性
- 定期生成并发送月账单
- 处理有访问频率限制的 API 请求
- 限制队列任务的并发数量
- 限制队列任务的执行频率
- 通过熔断器处理不稳定外部服务
- 处理外部服务接口未响应
- 通过队列任务中间件重构服务熔断器
- 异步高效处理视频上传
- 创建无服务器(Serverless)数据库
- 基于任务链和批处理生成复杂报告
- 为用户聚合来自不同社交平台的消息
- 通过事件监听器异步发放优惠券
- 异步发送应用部署通知
线上运维
- 选择正确的 CPU.和内存配置
- 管理队列处理器进程和内存泄露
- 队列处理器进程的弹性伸缩
- 使用 Laravel Horizon 管理队列处理器进程和伸缩策略
- 处理队列任务生命周期的所有失败
- 如何选择正确的消息队列驱动
- 如何确保 Redis 驱动消息队列的高可用
- 在生产环境管理队列任务的重试
- 在应用部署时重启队列任务处理器
- 如何设计可靠的消息队列任务
- 基于 Bus 门面或 dispatch 函数推送队列任务(Command Bus 模式)
- Laravel 消息队列配置参考大全
Serverless 队列:基于云服务提供商提供的队列服务,然乎基于 SDK 通过代码进行调度。
公众号订阅
该系列文章会同步到学院君的微信公众号,如果你想要在手机上获取更好的阅读体验,欢迎扫码订阅:
购买订阅服务
如果你觉得这个系列教程对你学习有帮助,可以选择升级为学院君订阅用户对学院君进行支持:
11 Comments
快快更新
已支持 《Laravel Queue In Action》
嗯 写的真不错
又有得学了=-=
数据结构、算法、网络协议、mysql、redis、nginx、消息队列 这都是招聘里面都明写的 哪怕是为了涨点工资呢 哈哈
谢谢院长的分享 收益良多
学院君,redis队列,redis 的配置也有个timeout ,这个timeout 配置多少合适。我这遇到一个问题,一个执行任务时间很长的任务,我的redis 的timeout 为65 ,队列执行完后,会报错。是不是redis 的timeout 超时了。我把redis 的timeout 设置为0,不会有这种错误
是数据库配置文件里面的还是队列配置文件里的 redis?
是redis server 的config 配置
学院君,laravle 的队列,怎样获知任务已完成,有没有回调,执行完成某个任务后,执行相应动作