概述

什么是队列?

百度百科是这样说的

“队列”是在传输过程中保存数据的容器。

举几个生活中例子: * iphone手机新款发布,三里屯iphone进的新货。大家要排队买,不能说一大堆人一起冲进去,那么这店就完了。 * 你有一大堆女朋友。你不得一个一个来,一起来你也受不了 ? * C语言中堆的概念也是这样,先进先出,不能起个大早赶个晚集。

回到正题:

消息队列则是为大批量处理数据而准备的一个概念,他有很多实现方式,并不是单一的代码结构。

这里有比较专业的一篇文章: http://www.cnblogs.com/xuyatao/p/6864109.html

还有适合新手揣摩的教程: http://www.imooc.com/learn/852


废话说完了,彻底进入正题:

Laravel 为我们提供了一个简单并很容易配置的队列类.

引用一点官方翻译的话:

Laravel 队列为不同的后台队列服务提供统一的 API , 例如 Beanstalk,Amazon SQS, Redis,甚至其他基于关系型数据库的队列。 队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短Web请求和相应的时间。 队列配置文件存放在 config/queue.php。 每一种队列驱动的配置都可以在该文件中找到, 包括数据库, Beanstalkd, Amazon SQS, Redis, 以及同步(本地使用)驱动。 其中还包含了一个null队列驱动用于那些放弃队列的任务。

Laravel 在 5.4版本中直接提供了全局函数 dispatch(),你可以再任意地方调用。并且无需加载任何对象或者实例化类。 这个函数主要的用途就是将你的队列需求加入到指定的容器中(专业点的叫生产者,其实你大可理解为你在商城购物完排队结账的时候)

设置驱动

Laravel神奇数据库迁移我就不多说了。我相信你知道。

  1. php artisan queue:table
  2.  
  3. php artisan migrate

执行完上面两条命令,费力打开 config\queue.php, key=default 的数组中使用env配置文件加载方式,laravel安装后默认为sync(同步),我们需要改为异步(你现在可以暂时认为同步!=队列),这里我们选择使用关系型数据库来实现队列

  1. QUEUE_DRIVER=database

创建任务

创建任务 = 搞一个生产者 = (其实就是写一个在队列中你想执行的业务逻辑),名字随意取,但最好遵守命名规范

  1. php artisan make:job SendReminderEmail

这个生成的文件大概分2部分:__construct() 构造方法 , handle 队列执行方法(意思就是在队列执行的时候,就用你这里面写的代码)

  1. class SendReminderEmail implements ShouldQueue
  2. {
  3. // 这块你不用搭理他
  4. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  5.  
  6. protected $name;
  7.  
  8. /**
  9. * Create a new job instance.
  10. *
  11. * @return void
  12. */
  13. public function __construct($name)
  14. {
  15. $this->name = $name;
  16. }
  17.  
  18. /**
  19. * Execute the job.
  20. *
  21. * @return void
  22. */
  23. public function handle()
  24. {
  25. DB::table('email')->insert([
  26. 'name' => $this->name,
  27. 'img'=>1,
  28. 'sort'=>1
  29. ]);
  30. }
  31. }

生产者

随后在控制器内使用dispatch方法调用即可,下面我则for循环创建了100个业务

  1. public function index(Request $request)
  2. {
  3. for ($i = 0; $i <= 100; $i++) {
  4. dispatch(new SendReminderEmail("email" . $i));
  5. }
  6. }

你通过数据迁移的数据表中就基本成这样了

消费者

消费者 = 队列处理 = (你在商城购物已经开始付钱了),使用下面命令则你开始消费,队列也会按照你上面的业务逻辑开始处理。处理完毕后当前任务会自动删除。

  1. php artisan queue:work

基本就下面这个样

到此Laravel5.4 队列简单配置与使用就结束了。

更多专业吊炸天的教程请参考China Laravel http://d.laravel-china.org/docs/5.4/queues

Laravel5.4 队列简单配置与使用的更多相关文章

  1. Docker下Python Flask+Redis+MySQL+RQ队列简单配置

    本篇博文主要讲解Docker下使用RQ队列的通信配置,主要是网上的部分文章写的不太清楚,特写一篇 作者使用docker-compose.yml文件调度各部分文件Dockerfile,起初是这样写的 v ...

  2. IBM websphere MQ远程队列的简单配置

    原理: 1.远程队列分发送方和接收方 2.接收方配置: 接收方配置要先拿到对方的发送通道配置,接收方的队列名称必须和远程发送方的队列名称一致,告诉远程发送方,你的地址,队列管理器名称等信息,在通道中建 ...

  3. RabbitMQ进阶使用-延时队列的配置(Spring Boot)

    依赖 MAVEN配置pom.xml <dependency> <groupId>org.springframework.boot</groupId> <art ...

  4. 小丁带你走进git世界一-git简单配置

    小丁带你走进git世界一-git简单配置 1.github的简单配置 配置提交代码的信息,例如是谁提交的代码之类的. git config  –global user.name BattleHeaer ...

  5. 以实际的WebGIS例子探讨Nginx的简单配置

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 以实际项目中的一个例子来详细讲解Nginx中的一般配置,其中涉 ...

  6. CentOS 7.0 使用 yum 安装 MariaDB 与 MariaDB 的简单配置

    1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB,两条命令都可以 systemctl sta ...

  7. ssm简单配置

    MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架. MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获. MyBatis 只使用简单的XML 和注解来配置和映射 ...

  8. 安装MariaDB和简单配置

    1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start maria ...

  9. BIND的进程一:DNS简单配置与的主从配置

    DNS的简单配置和DNS的主从配置   摘要:DNS(Domain-Name Server) ,DNS的服务起到的作用就是名称解析,在网络通讯来说计算机与计算机是通过IP地址相互通信的, 当是IP地址 ...

随机推荐

  1. luogu P4219 [BJOI2014]大融合

    题解:原来LCT也能维护子树信息,我太Naive了 用LCT维护当前子树节点个数 具体做法维护siz[x]=当前Splay子树和指向当前Splay子树的虚边所代表的节点个数 auxsiz[x]=指向x ...

  2. 2020牛客寒假算法基础集训营5 G街机争霸

    题目描述 哎,又是银首,要是你这个签到题少WA一发就金了 牛牛战队的队员打完比赛以后又到了日常甩锅的时间.他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo.牛牛和牛能进入了一个迷宫,这个迷宫 ...

  3. Anaconda: "WinError 127 找不到指定程序"

    Ref: https://blog.csdn.net/mengmengz07/article/details/103629693 问题: Windows系统,使用Anaconda,conda crea ...

  4. 吴裕雄--天生自然 JAVASCRIPT开发学习:函数调用

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. docker 批量命令

    docker中 启动所有的容器命令: docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) docker中    关闭所有的容器命 ...

  6. NOIp2018解题报告

    D1: T1 \(Ans = \sum_{i=2}^{n} |a_{i}-a_{i-1}|\),正确性可由贪心证得 T2 考虑贪心,选出一个属于A的集合,容易证明其是最优的 然后考虑一个数如果不被选, ...

  7. 到头来还是逃不过Java - 流程控制

    流程控制 没有特殊说明,我的所有这个系列的Java13的笔记都是从廖老师那里摘抄.总结过来的,侵删 引言 兜兜转转到了大四,学过了C,C++,C#,Java,Python,学一门丢一门,到了最后还是要 ...

  8. JDK11 JAVA11下载安装与快速配置环境变量教程

    https://blog.csdn.net/weixin_40928253/article/details/83590136 1.到Oracle官网下载jdk11,并安装.搜索“jdk",选 ...

  9. Java线程——线程习题(一)子线程执行10次后,主线程再运行5次,这样交替执行三遍

    题目:子线程执行10次后,主线程再运行5次,这样交替执行三遍 代码如下: package com.itheima.gan; /** * 子线程执行10次后,主线程再运行5次,这样交替执行三遍 * @a ...

  10. 65)STL中string的知识

    1)代码展示: string是一个类,只不过封装了 char*  而且还封装了  很多的字符串操作函数 2)string类的初始化: string的构造函数 ²  默认构造函数: string();  ...