为什么使用队列
使用队列的目的一般是:异步执行
出错重试
解释一下:
异步执行: 部分代码执行很耗时, 为了提高响应速度及避免占用过多连接资源, 可以将这部分代码放到队列中异步执行.Eg. 网站新用户注册后, 需要发送欢迎的邮件, 涉及到网络IO无法控制耗时的这一类就很适合放到队列中来执行.
出错重试: 为了保证一些任务的正常执行, 可以将任务放到队列中执行, 若执行出错则可以延迟一段时间后重试, 直到任务处理成功或出错超过N次后取消执行.Eg. 用户需要绑定手机号, 此时发送短信的接口是依赖第三方, 一个是不确定耗时, 一个是不确定调用的成功, 为了保证调用成功, 必然需要在出错后重试
Laravel 中的队列
以下分析默认使用的队列及其配置如下默认队列引擎: redis通过在 redis-cli 中使用 monitor 命令查看具体执行的命令语句默认队列名: default
分发任务
此处以分发 异步通知(class XxxNotification implement ShouldQueue)为例.
在Laravel中发起异步通知时, Laravel 会往redis中的任务队列添加一条新任务
redis 执行语句
redis> RPUSH queues:default
{
"displayName": "App\\Listeners\\RebateEventListener",
"job": "Illuminate\\Queue\\CallQueuedHandler@call",
"maxTries": null,
"timeout": null,
"timeoutAt": null,
"data":