laravel队列使用经验总结

本文探讨了异步处理在操作日志记录、访问日志记录等非实时写入任务的应用,介绍了如何通过异步操作提升应用性能及实现错误重试机制确保任务准确性。文章还详细说明了异步队列使用的最佳实践,包括避免重复消费、设置超时和内存限制等。

使用场景

1. 异步处理
  • 像每个的操作日志记录,访问日志记录这种非实时的写数据,必须使用异步写入

  • 耗时任务处理,需要计算/大量数据入库等

2. 应用间通信
  • 同步数据到第三方系统

  • 发送邮件/短信等

使用目的

1. 把非核心的异步操作分离,提高应用 『QPS』
2. 错误重试机制,保证任务的准确性

使用规范

  • 最终消费前,需检查数据处于可消费状态,避免重复消费;

  • 队列需要读写数据库时,需传递id;

  • 禁止数据库边chunk边修改状态进入队列;

  • 队列任务处理时间较长时,需要设置timeout,防止进程被kill掉,且比quene.php中的retry_after小,否则可能会引起队列重复执行;

  • 队列任务处理需要消耗较大内存时,需要设置memory,防止队列内存溢出而挂掉;

  • 队列任务处理的一个batch消息数过多时,在主队列中开一些子队列,并行处理,提高速度;

  • 如果有第三方回调,需要进行分离,防止第三方请求并发过高,导致服务器挂掉,从而导致队列服务不可用;

最佳实践

  • 最终消费之前,必须从数据库查询数据处于可消费状态;

  • 如果需要读写数据库,应该使用 id 传递资源主体,加快序列化,以及读取到数据库最正确的数据;

  • 队列中如果需要接收第三方回调(或者其它瞬间导致服务不可用的),建议进行分离,防止第三方请求服务器并发过高,io 承受不住导致服务器挂掉,最终导致队列服务不可用状态,影响主流程;这时可以通过另一台服务器接收第三方的回调消息,负责接住它们;

  • 除了 notify 场景,禁止依赖自动重试,防止重发;        


                                 欢迎关注微信公众号,定期分享干货!   

                                           




转载于:https://juejin.im/post/5a4c3cf1f265da431c70b0c0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值