thinkphp6 消息队列think-queue(完整版)
1.安装队列依赖
如果是在Linux上,进入thinkphp项目的think文件所在目录,执行安装命令
composer require topthink/think-queue
修改queue的配置文件,文件位置config/queue.php(安装成功后自动生成)
'redis', 'connections' => [ 'sync' => [ 'type' => 'sync', ], 'database' => [ 'type' => 'database', 'queue' => 'default', 'table' => 'jobs', ], 'redis' => [ 'type' => 'redis', 'queue' => 'default', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'select' => 0, 'timeout' => 0, 'persistent' => false, ], ], 'failed' => [ 'type' => 'none', 'table' => 'failed_jobs', ],];
3.在项目下新建一个Job目录存放处理消息
4.控制器编写逻辑代码 app/controller/index.php
use think\facade\Queue; public function job(Request $request) { $params = $request->get(); $jobHandlerClassName = 'app\job\Task'; $jobQueueName = 'task'; $orderData = ['order_sn'=>$params['id']]; //Queue::later();//立即执行 $isPushed = Queue::later(10, $jobHandlerClassName, $orderData, $jobQueueName); //这儿的10是指10秒后执行队列任务 if($isPushed !== false){ echo '队列添加成功'; }else{ echo '插入失败了'; } }
5.编写对应的消费者类 app\job\SendCertJob.php
doJob($data); if($rt){ $job->delete(); return true; } // 重试三次失败 todo... if($job->attempts() == 3){ $job->delete(); return false; } //执行失败10S后重试 $job->release(10); } public function doJob($data) { echo date('Y-m-d H:i:s')."\n"; return false; }}
php think queue:listen
–queue helloJobQueue \ //监听的队列的名称
–delay 0 \ //如果本次任务执行抛出异常且任务未被删除时,设置其下次执行前延迟多少秒,默认为0
–memory 128 \ //该进程允许使用的内存上限,以 M 为单位
–sleep 3 \ //如果队列中无任务,则多长时间后重新检查
–tries 0 \ //如果任务已经超过重发次数上限,则进入失败处理逻辑,默认为0
–timeout 60 // work 进程允许执行的最长时间,以秒为单位
执行命令开启队列
php think queue:work --queue sendCertQueue --daemon
开启的过程中遇到 不支持 --daemon 选项的可以进行后面的操作
修改think-queue下的Work.php文件51行,新增一下代码
->addOption('daemon', 'd', Option::VALUE_NONE, 'Run the queue server in daemon mode.')
来源地址:https://blog.csdn.net/a729885163/article/details/130742850
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341