最近在开发的过程中,遇到了这样一个场景:用户评论完之后需要延时一段时间来给代表推送企业微信消息,要求延时时间可以后台配置。这个时候我们首先就考虑到用队列实现。
队列之前也是经常使用,当时laravel的队列倒是第一次尝试,花了一个小时看英文文档,然后就可以按部就班的实现一个小的队列任务了。
laravel Queue
原理:它就类似写一个死循环的脚本在Linux系统持续运行,新的队列任务不断push到这个脚本中。所谓队列,会有数据的生产者和消费者之分。生产者向队列中投递数据,消费者从队列中获取数据。
使用场景:一种是高并发的情况,一种是耗时的操作,可以将任务放到队列中去,消费者从队列取任务执行,当然还有失败的情况如何处理,以及延迟,重试,更复杂的情况还有优先级的实现。
系统配置:laravel queue可配置多种队列驱动,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具体参见app/config/queue.php)
其中sync为同步,database为使用数据库,后面三种为第三方队列服务,最后一种为不使用队列。
通过在 .env 中的 QUEUE_CONNECTION 选项,来决定选择何种驱动。
如 QUEUE_CONNECTION=database 即为选择数据库驱动队列。
使用数据库驱动队列
(1)生成任务表
在终端下输入