最近小编收到群里面的小伙伴在使用ThinkPHP5.0的框架时,不知道如何使用php-queue(实在尴尬,网上不少这方面的教程)。哈哈,不想参考也不要紧,小编就具体地走一遍吧~~~关于什么是队列?队列的解决什么?队列有哪些场景?...等等这些问题,开发者请自行先去了解,还有本案例只针对ThinkPHP框架进行具体操做哦。php
推荐使用Composer进行安装,切换到项目的根目录,执行: composer require topthink/think-queuehtml
2. 配置消息队列的存储环境thinkphp
配置文件位于 application\extra\queue.php,如图:浏览器
使用Redis驱动,若是Redis环境尚未安装,请自行安装哦,很简单的,或者也可使用其余类型驱动,如图:app
3. 任务的建立composer
咱们在index模块下,Index.php文件,创建一个名为 queue 的方法(必定要这样么?固然不是,本教程,只是例子,你能够新建模块,方法名也能够是其余),如图:框架
4. 任务消息的消费以及删除处理ui
咱们在 index模块下建立一个 job 文件,该文件用来处理消费模式,如图:spa
在 Demo 这个类下,建立一个 fire 方法,该方法是消息队列默认调用的方法。如图:命令行
以上就是完成任务的建立--》推送--》消费了。
在浏览器或者终端,执行一下咱们 index/queue.html 方法,就完成建立以及推送了,关于任务消费,能够参考一下命令,在终端切换到项目的根目录:
5. 监放任务并执行
php think queue:listen
php think queue:work –daemon(不加–daemon为执行单个任务)
两种,具体的可选参数能够输入命令加 –help 查看
可配合supervisor使用,保证进程常驻
queue:subscribe 命令 [截至2017-02-15,做者暂未实现该模式,略过]
queue:work 命令
work 命令: 该命令将启动一个 work 进程来处理消息队列。
php think queue:work --queue helloJobQueue
queue:listen 命令
listen 命令: 该命令将会建立一个 listen 父进程 ,而后由父进程经过 proc_open(‘php think queue:work’)
的方式来建立一个work 子 进程来处理消息队列,且限制该work进程的执行时间。
php think queue:listen --queue helloJobQueue
Work 模式
php think queue:work \ --daemon //是否循环执行,若是不加该参数,则该命令处理完下一个消息就退出 --queue helloJobQueue //要处理的队列的名称 --delay 0 \ //若是本次任务执行抛出异常且任务未被删除时,设置其下次执行前延迟多少秒,默认为0 --force \ //系统处于维护状态时是否仍然处理任务,并未找到相关说明 --memory 128 \ //该进程容许使用的内存上限,以 M 为单位 --sleep 3 \ //若是队列中无任务,则sleep多少秒后从新检查(work+daemon模式)或者退出(listen或非daemon模式) --tries 2 //若是任务已经超过尝试次数上限,则触发‘任务尝试次数超限’事件,默认为0
Listen 模式
php think queue:listen \ --queue helloJobQueue \ //监听的队列的名称 --delay 0 \ //若是本次任务执行抛出异常且任务未被删除时,设置其下次执行前延迟多少秒,默认为0 --memory 128 \ //该进程容许使用的内存上限,以 M 为单位 --sleep 3 \ //若是队列中无任务,则多长时间后从新检查,daemon模式下有效 --tries 0 \ //若是任务已经超太重发次数上限,则进入失败处理逻辑,默认为0 --timeout 60 //建立的work子进程的容许执行的最长时间,以秒为单位
能够看到 listen 模式下,不包含 --deamon
参数,缘由下面会说明