使用场景
1. 异步处理
像每个的操作日志记录,访问日志记录这种非实时的写数据,必须使用异步写入
耗时任务处理,需要计算/大量数据入库等
2. 应用间通信
同步数据到第三方系统
发送邮件/短信等
使用目的
1. 把非核心的异步操作分离,提高应用 『QPS』
2. 错误重试机制,保证任务的准确性
使用规范
最终消费前,需检查数据处于可消费状态,避免重复消费;
队列需要读写数据库时,需传递id;
禁止数据库边chunk边修改状态进入队列;
队列任务处理时间较长时,需要设置timeout,防止进程被kill掉,且比quene.php中的retry_after小,否则可能会引起队列重复执行;
队列任务处理需要消耗较大内存时,需要设置memory,防止队列内存溢出而挂掉;
队列任务处理的一个batch消息数过多时,在主队列中开一些子队列,并行处理,提高速度;
如果有第三方回调,需要进行分离,防止第三方请求并发过高,导致服务器挂掉,从而导致队列服务不可用;
最佳实践
最终消费之前,必须从数据库查询数据处于可消费状态;
如果需要读写数据库,应该使用 id 传递资源主体,加快序列化,以及读取到数据库最正确的数据;
队列中如果需要接收第三方回调(或者其它瞬间导致服务不可用的),建议进行分离,防止第三方请求服务器并发过高,io 承受不住导致服务器挂掉,最终导致队列服务不可用状态,影响主流程;这时可以通过另一台服务器接收第三方的回调消息,负责接住它们;
除了 notify 场景,禁止依赖自动重试,防止重发;
领取专属 10元无门槛券
私享最新 技术干货