当前位置: 首页 > ds >正文

thinkphp-queue队列随笔

 安装

# 创建项目
composer create-project topthink/think 5.0.*# 安装队列扩展
composer require topthink/think-queue

配置

// application/extra/queue.php<?php
return ['connector'  => 'Redis',      // Redis 驱动'expire'     => 0,            // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null'default'    => 'default',    // 默认的队列名称'host'       => '127.0.0.1',  // redis 主机ip'port'       => 6379,         // redis 端口'password'   => '',           // redis 密码'select'     => 0,            // 使用哪一个 db,默认为 db0'timeout'    => 0,            // redis连接的超时时间'persistent' => false,
];

数据库

CREATE TABLE `qf_test` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`task_type` varchar(50) DEFAULT '' COMMENT '任务类型',
`data` text COMMENT '数据',
`pdate` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

创建队列(入队)-生产者

<?phpnamespace app\api\controller;use think\Controller;class Index extends Controller {// 生产者-入队public function qf() {// 1.当前任务将由哪个类来负责处理。$jobHandlerClassName = 'app\api\job\QfDev';// 2.队列名称,如果为新队列,会自动创建$jobQueueName = "qfDevQueue";// 3.当前任务所需的业务数据.$jobData = [ 'ts' => time(), 'bizId' => uniqid() , 'data' => $_GET ];// 4.将该任务推送到消息队列,等待对应的消费者去执行$isPushed = Queue::push( $jobHandlerClassName , $jobData , $jobQueueName );        // 把任务分配到队列中,延迟10s后执行// $isPushed = Queue::later(10,$jobHandlerClassName,$jobData,$jobQueueName); // database驱动时,返回值:1|false;// redis驱动时,返回值:随机字符串|falseif( $isPushed !== false ){echo date('Y-m-d H:i:s') . " a new Hello Job is Pushed to the MQ"."<br>";}else{echo 'something went wrong.';}}}

消费队列(出队)-消费者

<?phpnamespace app\api\job;use think\queue\Job;class QfDev {public function fire(Job $job,$data) {// 检查数据【可省】$flag = $this->checkJob($data);if(!$flag){$job->delete();return;}$isJobDone = $this->doJob($data);if ($isJobDone) {// ...// 执行完,删除任务$job->delete();}else{// 检查方法执行次数if ($job->attempts() > 3) {               $job->delete();// 重新发布,延期2秒再次执行//$job->release(2);}}}// 检查数据private function checkJob($data){// ... 数据检查return true;}// 业务处理private function doJob($data){// ... 业务处理return true;}
}

访问

// 请求接口
http://localhost/api/index/qf

队列命令

# 单次执行
开始一个队列
php think queue:work
停止所有队列
php think queue:restart
重启所有消息队列
php think queue:restart
php think queue:work# 多次执行
php think queue:work --daemon --queue helloJobQueue

宝塔任务进程管理器

http://www.xdnf.cn/news/12637.html

相关文章:

  • Dubbo学习(一):Dubbo介绍
  • C#使用MindFusion.Diagramming框架绘制流程图(1):基础类型
  • 服务器出现故障怎么办?快速排查与解决方法
  • dfn序的应用 (P1273 有线电视网题解)
  • ROS1: 使用rosbag的方式将点云topic保存为pcd文件
  • 中小制造企业的数字化转型,如何控制工业软件应用成本?
  • Docker 容器化基础:镜像、容器与仓库的本质解析
  • keil编译工程,结合map文件和bin文件,实测C语言中不同类型的变量存储在不同的内存区域
  • 柴油发电机组接地电阻柜的作用
  • yolov8自训练模型作为预训练权重【增加新类别】注意事项
  • 我用Amazon Q写了一个Docker客户端,并上架了懒猫微服商店
  • Web 3D协作平台开发案例:构建制造业远程设计与可视化协作
  • PC端直接打印功能(包括两张图片合并功能)
  • html 滚动条滚动过快会留下边框线
  • 2022年CSP-S1提高级第一轮题解
  • C++11新增标准讲解(上)
  • 【递归、搜索与回溯】专题三 穷举vs暴搜vs回溯vs剪枝
  • 【Vue】指令补充+样式绑定+计算属性+侦听器
  • 6.6 打卡
  • 西门子 S7-1200 PLC 海外远程运维技术方案
  • vue3+TS+eslint9配置
  • 《强连通分量》题集
  • 如何在Windows本机安装Python并确保与Python.NET兼容
  • day46python打卡
  • 1.4 编译库:静态库、动态库
  • Java并发包中的管程:Lock和Condition
  • 基于STM32语音识别柔光台灯
  • 基于深度学习的无人机轨迹预测
  • 《ERP原理与应用教程》第3版习题和答案
  • VSCode - VSCode 放大与缩小代码