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

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.lryc.cn/news/2403637.html

相关文章:

  • STM32标准库-TIM输出比较
  • 科技创新驱动人工智能,计算中心建设加速产业腾飞​
  • figma 和蓝湖 有什么区别
  • SQLServer中的存储过程与事务
  • STM32H562----------ADC外设详解
  • uniapp 安卓 APP 后台持续运行(保活)的尝试办法
  • AI大数据模型如何与thingsboard物联网结合
  • 【SSM】SpringBoot笔记2:整合Junit、MyBatis
  • STM32——CAN总线
  • 嵌入式面试高频!!!C语言(四)(嵌入式八股文,嵌入式面经)
  • 数据治理在制造业的实践案例
  • 【强化学习】——03 Model-Free RL之基于价值的强化学习
  • Edge(Bing)自动领积分脚本部署——基于python和Selenium(附源码)
  • html表格转换为markdown
  • VsCode 安装 Cline 插件并使用免费模型(例如 DeepSeek)
  • 短视频矩阵系统源码新发布技术方案有那几种?
  • React 第五十二节 Router中 useResolvedPath使用详解和注意事项示例
  • 【PmHub面试篇】性能监控与分布式追踪利器Skywalking面试专题分析
  • Cursor快速梳理ipynb文件Prompt
  • 天机学堂-分页查询
  • 业态即战场:零售平台的生意模型与系统设计解构
  • 微算法科技(NASDAQ:MLGO)基于信任的集成共识和灰狼优化(GWO)算法,搭建高信任水平的区块链网络
  • 全新Xsens Animate版本是迄今为止最大的软件升级,提供更清晰的数据、快捷的工作流程以及从录制开始就更直观的体验
  • 大语言模型评测体系全解析(下篇):工具链、学术前沿与实战策略
  • python打卡day46@浙大疏锦行
  • C++.OpenGL (1/64) 创建窗口(Hello Window)
  • Excel 发现此工作表中有一处或多处公式引用错误。请检查公式中的单元格引用、区域名称、已定义名称以及到其他工作簿的链接是否均正确无误。弹窗
  • NVIDIA DRIVE AGX平台:引领智能驾驶安全新时代
  • 推荐12个wordpress企业网站模板
  • 沙市区举办资本市场赋能培训会 点赋科技分享智能消费新实践