首先,我们要搞明白几个概念,从小到大依次有:队列任务队列连接。 他们属于依次被包含的关,一个队列里有许多的队列任务,一个连接中可以有许多队列。

  • 队列任务:对每个用户都会进行的操作,理解为队列任务,比方说用户注册时的,我们发送验证邮件的操作,每个用户注册,我们都会进行,这样的任务我们可以把它抽象成一个队列任务
  • 队列: 许多队列挤在一起等着被处理,形成了一个队列
  • 连接: 队列的储存形式
  • 队列处理器 处理队列任务的进程

举例:

   队列任务:某个操作,例如发邮件这个操作,之后我们会用更简单的操作举例代替

  队列:队列的存在是为了方便之后的队列处理器处理对应的队列任务

  连接:database(也就是指mysql),redis等,我们以database为主

实战:

  1.通过这个命令生成任务类: php artisan make:job SendEmail    会生成一个Jobs文件夹以及我们的任务类。

     顺便建立一个Controller来负责分发任务: php artisan make:controller QueueTestController

  2.具体的代码实现:

    如何在控制器里新建一个job,并传递参数呢?请看:

    SendEmail.php:

    

    QueueTestController.php:

    

    路由Route.php:

    

    建立job数据表:

    php artisan queue:table 

    php artisan migrate

    

    打开.env文件 

    把 QUEUE_DRIVER=sync 改成  QUEUE_DRIVER=database

    把它改成database,重复刚才的请求,再查看job表。

  3.开启队列任务处理器

   一行命令:php artisan queue:work

  4.用进程管理器supervisor来让我们刚刚的任务管理器永久后台运行,否则我们只能总开着终端窗口才能使任务处理器运行。

    4.1 安装  

      pip install supervisor

    4.2 配置

      supervisor的启动非常人性化,在命令行输入echo_supervisord_conf 会直接给我们一份默认的配置文件内容,我们将其复制下来,

      在任意一个当前用户有权限的地方新建一个.ini或者.conf后缀结尾的文件(我创建的路径:/usr/local/etc/supervisord.ini),将内容复制进去,保存即可,但其中有一些内容需要我们略做修改

      为了更直观的查看我们的进程运行情况,进行如下修改,去除httpserver和port的注释:。

           

      这样可以让我们在浏览器里查看进程运行情况

      然后最后一行做如下修改

      

      这里面放我们的laravel-worker 配置文件,在这里创建并编辑我们的laravel-worker.ini文件

      

      比较重要的几个参数: 

        command: 这里按我的理解是指 supervisor会对这个command命令所产生的进程进行管理,但是由于我们不在项目文件夹下,不能直接php artisan queue:work,所以我们在artisan前面加上我们的项目路径,被马赛克遮住的部分就是我们laravel项目的文件目录

        user: 当前的系统用户名称,root等你当前使用的用户名即可

        最后一行的logfile:这里要选择我们拥有权限的目录才可以,而且文件夹和文件需要我们手动帮其创建

如此一来,supervisor的配制就大工告成了

然后 surpervisord -c 配置文件目录启动,而我的命令就是:supervisord -c /usr/local/etc/supervisord.ini

在浏览器里输入http://localhost:9001,就可以看到我们的任务处理器跑起来啦

  

laravel里的队列学习的更多相关文章

  1. Laravel中的队列处理

    Laravel中的队列处理 队列介绍 为什么要有消息队?这里先对其进行一个简单的介绍,方便还不了解的同学理解.在面向对象里,有一个很简单的概念--消息传递,而消息队列就可以在它上面扩展一下,把它说的更 ...

  2. laravel服务l队列资料整理

    Laravel 队列系列 —— 基于 Redis 实现任务队列的基本配置和使用 1.概述 在Web开发中,我们经常会遇到需要批量处理任务的场景,比如群发邮件.秒杀资格获取等,我们将这些耗时或者高并发的 ...

  3. .Net里的Attribute 学习

    .Net里的Attribute 学习 前两天看到书里边讲Attribute定制,结合了网上的资料,自己做了简单的登录功能,并结合了某些设计模式,有兴趣的朋友可以看下.由于时间原因,没有做过多的说明,直 ...

  4. laravel的消息队列剖析

    laravel的消息队列剖析 这篇来自于看到朋友转的58沈剑的一篇文章:1分钟实现"延迟消息"功能 在实际工作中也不止遇见过一次这个问题,我在想着以前是怎么处理的呢?我记得当初在上 ...

  5. Laravel 5.1 简单学习

    Laravel 5.1 简单学习 (1)Laravel的nginx配置,不配置或者配置错误,可能会报404或500错误,访问不到页面. location / { try_files $uri $uri ...

  6. [原创]Laravel 基于redis队列的解析

    目录 参考链接 本文环境 为什么使用队列 Laravel 中的队列 分发任务 任务队列 Worker Last-Modified: 2019年5月10日11:44:18 参考链接 使用 Laravel ...

  7. Laravel 的Artisan 命令学习

    Laravel 的Artisan 命令学习 Artisan 是 Laravel 提供的 CLI(命令行接口),它提供了非常多实用的命令来帮助我们开发 Laravel 应用.前面我们已使用过 Artis ...

  8. Laravel中利用队列发送邮件的方法示例

    https://www.jb51.net/article/121647.htm 本文主要给大家介绍了关于Laravel中队列发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的 ...

  9. laravel 定时任务通过队列发送邮件

    https://www.jianshu.com/p/f6b94596098e 关于laravel发送邮件,请先参考我的另一片文章:laravel sendcloud发送邮件,再继续往下看. 1.用da ...

随机推荐

  1. nginx配置之虚拟主机功能

    虚拟主机功能: 一个nginx下运行多个网址(站点域名) 方式一:nginx.conf中的http{}中的每一个server{}就是一个站点(相同端口): #虚拟主机1 server { listen ...

  2. 10 分离式web框架

    10 分离式web框架 wsgiref模块: 将http请求封装成以键值对的形式封装成字典environ: "PATH_INFO"对应的值为请求文件路径, “QUERY_STRIN ...

  3. [PHP]用PHP自己写一个基于zoomeye的api(偷懒必备quq)

    0x01 起因 因为手速慢,漏洞刷不过别人,一个个手补确实慢,所以想自己写一个api,一键抓取zoomeye的20页,然后就可以打批量了 ovo(真是太妙了!) 0x02 动工       1.抓包做 ...

  4. DOM变化后事件绑定失效

    第一个file在change时,是能够触发事件的,而第二插入的file则没有change事件.对于这个问题,有如下两种解决方法: 第一种是将绑定change事件封装成一个函数,在点击button按钮插 ...

  5. 了解Lombok插件

    Lombok是什么 Lombok可以通过注解形式帮助开发人员解决POJO冗长问题,帮助构造简洁和规范的代码,通过注解可产生相应的方法. Lombok如何在IDEA中使用 我们都知道,使用一种工具,一定 ...

  6. Python 每日一练 | Flask 实现半成品留言板

    留言板Flask实现 引言 看了几天网上的代码,终于写出来一个半成品的Flask的留言板项目,为什么说是半成品呢?因为没能实现留言板那种及时评论刷新的效果,可能还是在重定向上有问题 或者渲染写的存在问 ...

  7. GitHub+jsDelivr+PicGo 打造稳定快速、高效免费图床

    标题: GitHub+jsDelivr+PicGo 打造稳定快速.高效免费图床 作者: 梦幻之心星 347369787@QQ.com 标签: [GitHub, 图床] 目录: 图床 日期: 2019- ...

  8. 关于如何提高SRAM存储器的新方法

    SRAM是当今处理器上最普遍的内存.当芯片制造商宣布他们已经成功地将更多的电路封装到芯片上时,通常是较小的晶体管引起了人们的注意.但是连接晶体管形成电路的互连也必须收缩.IMEC的研究人员提出了一个方 ...

  9. Splay代码简化版

    皆さん.こんにちは.上一篇文章,我们讲了Splay如何实现.这一篇我们来让我们的伸展树短一点. 上一篇Splay讲解的链接:リンク. 首先还是变量的定义,在这里呢,我把一些小函数也用Define来实现 ...

  10. 在jsp文件中出现Unknown tag (c:out)

    出现这个提示之后,这个out是没有被执行的,在最前面加上 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix= ...