项目中经常会有后台运行任务的需求,比如发送邮件时,因为要连接邮件服务器,往往需要5-10秒甚至更长时间,如果能先给用户一个成功的提示信息,然后在后台慢慢处理发送邮件的操作,显然会有更好的用户体验。
前置条件
liunx
redis(
安装方式参考之前文章
)
消息队列选择php-resque
git地址
git://github.com/chrisboulton/php-resque.git
克隆好文件夹内容应该如下图
传到测试服务器,命令行输入
php queue.php PHP_Job
会报错,提示如图
需要用到composer(composer.json文件参考下一篇推文)
安装好之后再执行php queue.php queue【自定义queue名】PHP_Job【自定义job名】,如果出现
表示服务端redis没有长运行,开启redis
执行
成功创建job
php check_status.php d2fadd4c48cd1ceb8d36030b44b681c9
返回状态都是1,字典在
说明已生产、未消费
进入redis-cli,可以看到生成了几条job的记录
下面开始开启消费者
QUEUE=* php resque.php
错误日志中大概推测没有exec权限,修改php.ini,重启php-fpm
再次执行
QUEUE=*【可以写创建job时候的queue名,多个用逗号(,)隔开】 php resque.php >> log.log 2>&1 &
可以看到:日志信息里面记录了消费者的Pid
同时使用php check_status.php查询状态,看到是4,已完成
reids里面也能看到多了一个worker的记录
测试,把resque进程都kill掉,如图
再创建生产者,查询状态一直是1,未处理
当开启消费者进程之后,状态变成2:处理中-》4:已完成
以上,是实践过程,基于此,可以实现许多类似消费者生产者模式的消息队列,比如发送邮件、通知等,将结果同步返回,后台处理业务逻辑,可避免出现类似
Severity: Warning --> fwrite(): SSL: Broken pipe
的问题
领取专属 10元无门槛券
私享最新 技术干货