我是用的PHP框架是thinkphp6,所以使用的相对来说比较匹配的think-queue.尽量把每一步都写出来,经过自己采坑,尽量做到按照步骤下来,基本都能跑通!
官方地址:https://github.com/top-think/think-queue
第一步:安装composer(如果这一步都不会,那么就不用看下去了)
第二步:在项目根目录下,安装要用的依赖,执行:composer require topthink/think-queue
第三步:本地安装redis服务端。我这里用的是集成工具,自带redis服务,如果没有的话,就去redis的官网:https://redis.io/,下载安装一下,按照教程,启动redis服务,应该也不难的,我试过。
第四步:使用phpinfo查看你的PHP是否已经安装redis的扩展,如果没有,那么请注意了,你需要安装redis扩展。具体操作如下:
·使用phpinfo查看你的系统版本以及PHP支持的扩展版本:
要注意几个地方 X64,TS,VC,以及你的PHP版本,然后去https://windows.php.net/downloads/pecl/releases/redis/ 这个地址找到对应的redis版本,下载,解压。
·找到php_redis.dll文件,把它放到你的PHP安装目录的ext文件夹下
·编辑php.ini,加入extension=php_redis;这里注意,PHP版本不同有时候写法不一样,也有可能是extension=php_redis.dll,这个你根据php.ini中查看类似写法就好。
·再用phpinfo看一下,发现有redis扩展了,说明装好了。
第五步:编写app\queue.php文件,这个文件是自动生成的。
按照这样设置就行,redis的连接根据你自己的实际情况来。
第六步:在app下新建文件夹job,然后新建一个php文件,这里就是放怎么去处理消息队列的逻辑,比如新建Job1.php文件
第七步:在任何地方可以将一个数据推入消息队列:think\facade\Queue::push($job, $data = '', $queue = null)
第八步:在命令行执行:php think queue:listen 来监听消息队列,一旦队列里面有数据,就会启动消费进程去消费。这里要注意一点,如果你的逻辑处理起来耗时很长,超过了默认的60秒,那么是会报错的。如果你想要不报错,可以这样起命令:php think queue:listen --timeout=600 (任务执行一次之后还是会一直执行的,可以在代码开头加一段这个
if ($job->attempts() == 1) { //这样任务只会执行一次 $job->delete(); }
第九步:如果你想以守护进程的形式常驻这个队列的监听,那么使用supervisor这个我没试过,试过的小伙伴也可以在评论区补充下怎么使用,大家互相学习!