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

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

举例:

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

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

  连接: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. Nodejs模块使用

    一.fs模块 (1)查看文件状态 fs.stat(path, callback) / statSync(path) (2)创建目录 fs.mkdir(path, callback) / mkdirSy ...

  2. Request.params,Request.form,Request.querystring区别(转)

    自己总结:---大致意思是: 1.传参的方式分为:get方式传参,post方式传参,request.cookies和request.servervariables 2.这几种获取参数方式获取的都是一个 ...

  3. 201771010128王玉兰《面向对象程序设计(Java)》第八周学习总结

    第一部分:理论知识部分总结 (1)接口:接口不是类,而是对类胡一组需求描述,由常量肯一组抽象方法组成. a:接口中不包括变量和有具体实现的方法 b:只要类实现了接口,则该类要遵从接口描述的统 一格式进 ...

  4. UVA11038

    题目大意:见刘汝佳<算法竞赛入门经典——训练指南>P173 解题思路: 求出 0 到 m-1 这些数字中 0 出现的次数(此处要特判 m = 0 的情况),再求出 0 到 n 这些数字中 ...

  5. adb常用命令食用方法

    一.什么是adb? adb是Android Debug Bridge的缩写,即安卓调试桥:那什么是安卓调试桥?简单来说,就是一个通用命令行工具,允许计算机与模拟器或连接的安卓设备之间进行通信,提供各种 ...

  6. Spring MVC必须知道的执行流程

    Spring MVC的执行流程 一.名词解释 1.前端控制器(DispatcherServlet) 接收请求,响应结果,相当于转发器,中央处理器 2.处理器映射器(HandlerMapping) 根据 ...

  7. Word使用技巧——持续更新

    Q1:word 2007 打开后默认显示缩略图而不是文档结构图? A1:三步曲 1)打开word,关闭缩略图,保存并关闭文档 2)重新打开word(此时应该没有显示缩略图),勾选上“文档结构图”,保存 ...

  8. Spring_api方式实现aop

    第一步: public interface UserService { public void add(); public void update(int a); public void delete ...

  9. golang如何优雅的编写事务代码

    目录 前言 需求 烂代码示例 重构套路 一.提前返回去除if嵌套 二.goto+label提取重复代码 三.封装try-catch统一捕获panic 前言 新手程序员概有如下特点 if嵌套特别多.重复 ...

  10. [COCOS2DX-LUA]0-005.cocos2dx中关于全面屏和折叠屏的适配的一些见解

    1.随着科技的发展,我们可以看到从iphoneX的刘海屏开始,引发了各种全面屏和异形屏的出现.这是科技的进步,但是对于各大的应用厂商来说,苦不堪言. 2.当然 ,吐槽归吐槽,我们还是要理智的去对待这个 ...