检查是否安装redis(没有请自行百度安装):
phpinfo:
配置thinkphp-queue,没有请执行 composer require topthink/think-queue 加入:
创建 队列 文件:
use thinkQueue;class TestQueue {// 测试public function queue(){// 推迟 n 秒执行 $queue = '指定队列名'Queue::later('2', 'appmessagejobWork','[email protected]','');// 执行 Work 的 send 方法//Queue::push('appmessagejobWork@send','[email protected]');// 默认执行 Work 的 fire 方法//Queue::push('appmessagejobWork','[email protected]'); echo '加入队列成功';} }
队列 逻辑处理 文件:
namespace appmessagejob;use thinkqueueJob;class Work {// 默认执行的方法public function fire(Job $job, $data){$isJobDone = $this->send($data);if ($isJobDone) {//成功删除任务$job->delete();} else {//任务轮询4次后删除if ($job->attempts() > 3) {// 第1种处理方式:重新发布任务,该任务延迟10秒后再执行//$job->release(10);// 第2种处理方式:原任务的基础上1分钟执行一次并增加尝试次数//$job->failed();// 第3种处理方式:删除任务$job->delete();}}}/*** 根据消息中的数据进行实际的业务处理* @param array|mixed $data 发布任务时自定义的数据* @return boolean 任务执行的结果*/private function send($data){// 开始执行队列的逻辑echo 'int ....';echo PHP_EOL;echo 'data: ' .$data;echo PHP_EOL;// ...return true;} }
后台监听即可:
php think queue:listen
php think queue:listen --queue 'queuename' // 监听指定队列
访问 127.0.0.1/message/testqueue (路由自行配置)
控制台查看
参考文档:https://github.com/coolseven/notes/blob/master/thinkphp-queue/README.md
守护进程(supervisor
):https://blog.csdn.net/qq_34856247/article/details/86741533