聊一聊yii2-queue你可能不知道的事

PHP - Yii2 异步队列 在 Yii2 中,队列的实现通常使用 Supervisor 或 Guzzle 这样的守护进程来监听队列,并在有新任务时自动执行。队列中的任务通常以闭包函数或类的实例形式存在,可以指定任务的处理顺序、优先级等。同时,你还可以通过监听队列来控制任务的执行顺序、优先级等,实现更加灵活的任务调度。这个命令会监听队列中的新任务,并在有新任务时自动执行。配置队列组件:在应用程序的配置文件中,你需要配置队列组件的连接信息,包括队列服务器地址、端口、驱动方式等。处理队列任务:当有新任务到达时,监听进程会调用任务类中的。 阅读详情
业务描述

在聊yii2-queue之前,先来了解下最近使用queue的业务场景。公司最近需要开发游戏app热更新的后台功能,热更新的差异包在后台计算生成,所谓差异包就是用新版本的包对比旧版本的包并把有修改或新增的文件重新组成一个新包。这是个很耗时、很占cpu和内存(zip压缩包对比)的操作,所以放到队列慢慢处理。版本包比较大(大约400MB/个),所以考虑存放在第三方服务,每次计算都从第三方下载回来,生成后重新上传到第三方服务器

问题

上面业务会引发以下问题:

  • 文件上传或下载到第三方服务器不完整
  • yii2-queue运行超时,进程自杀
版本
  • yii2-queue: 2.0 , 队列驱动用的是redis
  • redis :测试2.6,生产4.0
  • php : 7.1
定位、解决问题过程

在开发调试时,用的都是小包(一般不超过5M)的包进行测试,所以不会出现上面的问题。但是,到对接的时候用大包和计算多个版本的差异包时,耗时长还引发一系列其它问题。因为前期开发偷懒,没有对程序的每一步做日志追踪,后期排查不到问题。首先出现的、最头痛的问题是包计算到一半就停了,并且没有任何错误日志,慌得一匹。

我的第一个反应就是:可能服务器内存或cpu崩了,导致进程被杀。查看服务器后,发现确实占得很高,但不会把程序杀死。排查了很久,决定重新追踪程序日志并且从让程序断掉的包入手(因为程序每次计算这个包时断掉),所以就出现了以上的第一个问题:文件上传或下载到第三方服务器不完整,导致zip受损,解压出错。这个问题不是今天主要聊的,只简单总结下,每次上传或下载完后md5_file和第三方提供的md5对比即可保证文件的完整性。

解决完文件完整性问题后,发现程序被杀的问题还没解决。正头疼时,之前追踪的日志成功捕获到有用信息
在这里插入图片描述
很明显,程序超时yii2-queue进程自杀了。查看yii2-queue相关文档,没有发现相关说明。只能看源码有没有相关参数,结果在Queue.php找到:

 /**
  * @var int default time to reserve a job
  */
 public $ttr = 300;

这个是yii2-queue队列进程任务的保留工作时长,默认是300s。重新配置即可:

 'hotUpdateQueue'=>[
        'class' => \yii\queue\file\Queue::class,
        'as log' => \yii\queue\LogBehavior::class,
        'path' => dirname(dirname(__DIR__)) . '/hotUpdateQueue',
        'ttr' => 3600,//保留作业时长
  ],

或许你还会疑问,前文说的是用redis做驱动,为什么这里的配置是文件驱动?

原因是:yii2-queue的队列任务与redis 4.0版可能有兼容性(猜测),部分任务数据写不进去,2.8redis是正常的。所以发布时,临时切换为文件驱动

yii-queue搭配redis的使用 在本机上安装redis Windows环境下 下载地址:https://github.com/tporadowski/redis/releases。 下载的zip,解压的指定的路径 打开一个cmd窗口 使用 cd 命令切换目录到解压目录后,cmd窗口中,输入下列命令。redis服务即可启动 redis-server.exe redis.windows.conf 安装Yii2的redis扩展 composer require --prefer-dist yiisoft/yii2-r... 阅读详情

相关推荐

安卓无障碍服务保活实战:如何用AccessibilityService实现后台常驻(附完整代码)

本文深入解析如何利用Android无障碍服务(AccessibilityService)实现后台服务保活,涵盖多版本系统适配、前台服务集成、开机自启机制等关键技术。通过详细的Kotlin代码示例和合规性指导,帮助开发者构建稳定可靠的后台服务解决方案,同时避免因滥用无障碍服务导致的应用下架风险。

milk5的博客 1073

Yii2 queue的队列使用详解

一.基于redis 1.安装redis ,并进行相关配置 2.yii2 项目中使用composer 安装 yii2-redis 3.yii2 项目中使用compsoer 安装yii2-queue 配置文件设置: 'redis' => [ 'class' => \common\components\cache\RedisCache::class, 'hostname' => 'localhost', 'port' => 6379, 'data

大鹏 9642

Camera Sensor接口协议全解析(六)聚焦onsemi HiSPi接口的技术突破与应用实践

摘要: Onsemi HiSPi是一种高速并行接口协议,专为高分辨率图像传感器设计,具备1600 Mbps传输速率、低功耗和高兼容性特点。通过对比DVP、MIPI CSI-2等主流协议,HiSPi在工业/医疗领域表现突出,支持动态功耗控制、多ROI和CRC校验。其创新架构包含多PHY设计,提供分组SP、流SP等多种工作模式,满足灵活传输需求。实际应用中,HiSPi在PCB缺陷检测(5μm精度)和液晶面板检测(0.3% Mura检出率)等场景展现卓越性能,成为高速成像领域的关键技术。

GateWorld的博客 1437

Yii2-Queue实现轻量级消息队列

概述 Yii2-Queue是Yii2官方制作的一个消息队列,提供多个缺点:Syncronous, File, DB, Redis, RabbitMQ, AMQP Interop, Beanstalk, Gearman等,使用Yii2开发的时候使用该扩展比较合适. 驱动配置: Syncronous 如果打开handle属性,则在使用过...

chenzhao635的专栏 2203

PaddleOCR实战指南:从环境搭建到自定义模型训练

本文提供了PaddleOCR从环境搭建到自定义模型训练的完整实战指南。详细介绍了使用Anaconda或Docker搭建稳定开发环境、准备与标注数据集、进行文本检测与识别模型训练的核心步骤与参数调优技巧,并分享了数据增强、模型微调及解决实际项目难题的实用方法,帮助开发者高效掌握PaddleOCR应用。

gold的博客 644

2025年“区块链技术”职业院校技能大赛赛后复盘与总结(必看)

记录一次2025年“区块链技术”职业院校技能大赛的参加经验总结与赛后复盘

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 1994

Yii队列Queue的使用

2、config里注册queue,5、找一个执行的触发控制器。

qq_31580499的博客 892

自己的搭建的slam机器人建图导航测试

1、前言 这里是对自己搭建的slam机器人建图导航的功能测试,原本并不想写这一篇的,因为每个小伙伴的需求都不一样,但是发现还是有同学有需求,于是就有了这一篇。本篇属于说明分享类文章,不涉及细节解释。按照步骤操作即可。 本次测试需要建图算法my_slam_gmapping、导航框架navigation、以及explore_lite功能包、mbot_teleop键盘控制功能包等。 环境:ubuntu mate 16.04 + ROS Kinetic 功能包下载:在公众号:小白学移动机器人,发送:建图导航测试,即

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 8704

Pythia-Intervention-70m-Deduped模型深度解析:性别代词干预如何影响语言模型行为?

在人工智能语言模型快速发展的今天,理解模型内部工作机制变得愈发重要。Pythia-Intervention-70m-Deduped模型作为一个专门研究性别代词干预对语言模型行为影响的实验性项目,为我们提供了一个独特的视角来探索AI模型的内部决策过程。这个开源项目通过系统性的干预实验,揭示了语言模型在处理性别相关文本时的潜在偏见和行为模式。 ## 🔍 项目核心功能:性别代词干预实验 Pythi

gitblog_00059的博客 755

【反蒸馏实战 00】AI抢不走的工作:一份针对30个“高危”职位的“反取代”实战手册(反蒸馏计划启动)

AI时代职场生存指南:30个技术岗位的“反蒸馏”实战策略 随着AI技术快速发展,职场正面临前所未有的结构性重构。本系列专栏聚焦30个技术岗位,深入分析AI对各职位的影响路径,并提供系统性的"反蒸馏"策略。通过5层分析框架(AI冲击现状、核心价值解构、AI天花板、能力升级路径、人机协作模式),帮助从业者识别可替代任务与核心价值,建立不可替代的专业优势。内容涵盖IT开发、数据分析、产品管理等技术领域,为职场人提供从“被AI替代”到“与AI协同”的转型路线图,守护职业价值。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1654

【AFAC2026金融智能-赛题四】我做了一个疯狂的决定,把Embedding和Reranker全删了

本文介绍了AFAC2026金融智能挑战赛赛道四的解题思路,核心是在500万token的严格限制下实现金融长文本的高效问答。作者通过四步流水线(规划、BM25检索、记忆压缩、LLM推理)优化流程,重点创新在于: 采用零API调用的纯BM25检索,配合多路查询、封面页加权和页面邻接扩展等策略 设计高效的检索算法,从问题中提取专有名词并构建多路查询组合 深入理解评分公式,平衡准确率和token消耗,最终在准确率提升的同时将token消耗从数百万降至百万级 这些创新使方案在严格限制下实现了性能突破,展示了在资源受限

230

使用yii2-queue结合redis来实现队列功能

为什么80%的码农都做不了架构师?>>> ...

weixin_34356138的博客 3527

C++和OpenGL实现3D游戏编程【连载7】——文字和汉字的显示(附源码)

上一节我们讨论了纹理在二维平面内不规则图形贴图的相关基础操作,本节我们开始了解游戏里文字以及汉字的显示方法。本节课我们将从基本的ASCII字符显示,拓展到中文字符的显示,最后再讲到纹理字符的显示,并对各种文字显示方法的优缺点和使用场景进行分析,这节课将使用到显示列表、兼容视图、屏幕图形转纹理等操作。

zhooyu的博客 1500

Yii2 Redis Queue

Yii2 中的 Redis Queue 组件提供了高效的任务队列解决方案,采用 Redis 作为底层存储,支持实时监听和批量处理两种消费模式。其核心机制包括任务序列化、阻塞式弹出、延迟任务和失败重试等功能。生产环境中建议配合 supervisor 管理进程,开启 Redis 持久化,并实施队列监控。典型应用场景包括邮件发送、数据同步等异步任务处理,需注意任务类加载、进程管理和内存泄漏等问题。通过合理配置多进程消费和任务拆分,可显著提升队列处理性能。

wolf23151269的博客 789

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Yii2.0 queue队列

虽然接触过几门语言,但是在大佬们谈论队列的时候还总是像是一座大山,经过一段时间的整理,以下我来谈谈我对队列的看法(路过大神扶正请温柔)。 == 关于队列 == 1.队列就像是一个容器,把来不及操作的东西井然有序的放入。 2.通俗的讲,可以把队列看做一个城市的马路。有很多马路,各有各的秩序和走向,先驶入的先走出马路,马路与马路车辆不会相互影响。队列里的内容是有一定规格的,就想机动车...

PersonalM的博客 1562

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

yii2-queue一个好用的yii2队列操作扩展

yii2-queue a yii2 extension to make simple to use queue. yii2-queue让队列的使用在yii2中变得更轻松,她为各种队列组件的使用提供了一个标准的接口,您只需要配置好需要使用的队列组件,就能轻松使用, 同时您在不同队列组件之间的切换也只需要修改下配置文件,重启下队列监听进程即可,目前支持数据库队列,redis队列,beanstalkd队...

echojson的专栏 498

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

yii2-queue 学习笔记

参考https://github.com/yiisoft/yii2-queue/blob/master/docs/guide/README.md一.基于redis 1.安装redis ,并进行相关配置 2.yii2 项目中使用composer 安装 yii2-redis 3.yii2 项目中使用compsoer 安装yii2-queue 4.将redis和queue配置写入文...

amygukg6872的博客 316

yii2-queue用法

#安装 composer require yiisoft/yii2-queue #加入配置 // config/main.php return [ 'bootstrap' => [ 'queue', ], 'components' => [ 'queue' => [ 'class' => \yii\queue\file\Queue::class, ], ], ]; 具体业.

wuxing164的博客 1167

yii2 mysql 队列_yii2 队列 shmilyzxt/yii2-queue 简介

在yii2论坛中看到一个关于队列的帖子,感觉不错.http://www.yiichina.com/extension/1084(注:SendMail 错写为 SendMial,粘贴时要注意了.)在使用的过程中觉得挺好的,建议看一下关于队列的原理.shmilyzxt/yii2-queue 简单解释:我用的yii2高级版,我们从配置开始看代码,这里我用的是mysql队列,首先配置文件,我把queue配...

weixin_34996054的博客 331

Yii队列(queue)示例

yii2-queue让队列的使用在yii2中变得更轻松,它为各种队列组件的使用提供了一个标准的接口,您只需要配置好需要使用的队列组件,就能轻松使用。 安装: php composer.phar require --prefer-dist shmilyzxt/yii2-queue "dev-master" 或者添加:"shmilyzxt/yii2-queue": "dev-master" 到 composer.json 假设你已经安装好了yii2-queue,下面就说一下怎么使用,本代码基于Yii2.

m0_37634311的博客 926

yii2 mysql 队列_Yii2 队列 shmilyzxt/yii2-queue 简单概述

shmilyzxt/yii2-queue 简单解释:1.我用的yii2高级版,我们从配置开始看代码,这里我用的是mysql队列,首先配置文件,我把queue配置项写在根目录common\config\main-local.php下的components数组下,更改一下数据库配置.复制composer安装后复制vendor\shmilyzxt\yii2-queue\jobs\jobs.sqlvend...

weixin_34550722的博客 398

Yii2 queue队列使用与配置详解

yii2-queue 的使用 安装 composer require --prefer-dist yiisoft/yii2-queue 配置,在 common/config/main.php 中配置 return [ 'bootstrap' => [ 'queue', // 把这个组件注册到控制台 'log' ], 'components' => [ 'cache' => [ 'cla

baidu_33055905的博客 1656

Yii使用queue实现队列

Yii使用queue实现队列

huaweichenai的博客 1631

Yii2.0 queue

https://www.yiichina.com/tutorial/1635 https://my.oschina.net/gcdong/blog/3031113 https://www.yii-china.com/extend/detail/4 yii2-queue 安装首先得安装,用的是composer,这个很简单,在你的项目目录下面composer require --prefer-...

weixin_30546189的博客 238

yii2 mysql 队列_yii2-queue一个好用的yii2队列操作扩展

yii2-queuea yii2 extension to make simple to use queue.yii2-queue让队列的使用在yii2中变得更轻松,她为各种队列组件的使用提供了一个标准的接口,您只需要配置好需要使用的队列组件,就能轻松使用,同时您在不同队列组件之间的切换也只需要修改下配置文件,重启下队列监听进程即可,目前支持数据库队列,redis队列,beanstalkd队列,其...

weixin_29240343的博客 428

php框架中的队列使用,Yii2 queue的队列使用详解

少废话主要看文档yii2-queue 的使用1.安装composer require --prefer-dist yiisoft/yii2-queue2.配置,在 common/config/main.php 中配置redis作为驱动return ['bootstrap' => ['queue', // 把这个组件注册到控制台],'components' => ['redis' =&g...

weixin_42347925的博客 1139
上一篇: Yii2 联表查询数据丢失,即出现主键覆盖情况的解决方法
下一篇: 各种插件、扩展、工具网站
小Z笔记
博客等级 码龄9年 11粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值