PHP - Yii2 异步队列

news2024/11/16 18:06:18

1. 前言使用场景

在 PHP Yii2 中,队列是一种特殊的数据结构,用于处理和管理后台任务。队列允许我们将耗时的任务(如发送电子邮件、push通知等)放入队列中,然后在后台异步执行。这样可以避免在处理大量请求时阻塞主应用程序,从而提高应用程序的性能和响应能力。

批量任务需要提高处理速度,比如10万个消息,可以起10个异步队列消费进程,同时消费。

延时任务,如订单超时30分钟未支付,自动取消。

在 Yii2 中,队列的实现通常使用 Supervisor 或 Guzzle 这样的守护进程来监听队列,并在有新任务时自动执行。队列中的任务通常以闭包函数或类的实例形式存在,可以指定任务的处理顺序、优先级等。

使用 Yii2 队列时,你需要进行以下步骤:

  1. 配置队列组件:在应用程序的配置文件中,你需要配置队列组件的连接信息,包括队列服务器地址、端口、驱动方式等。
  2. 创建任务:创建一个继承自 yii\queue\JobInterface 的类,实现 execute() 方法来定义具体的任务逻辑。可以将任务中的耗时操作放在这个方法中执行。
  3. 推送任务:使用 Yii::$app->queue->push() 方法将任务推送到队列中。你可以根据需要指定任务的优先级、延迟执行时间等选项。
  4. 启动队列监听:通过运行 php yii queue/listen 命令来启动队列监听。这个命令会监听队列中的新任务,并在有新任务时自动执行。你可以根据需要指定监听的进程数、超时时间等参数。
  5. 处理队列任务:当有新任务到达时,监听进程会调用任务类中的 execute() 方法来执行任务。任务完成后,监听进程会自动处理下一个任务。

通过使用 Yii2 队列,你可以将耗时的后台任务与主应用程序分离,提高应用程序的性能和响应能力。同时,你还可以通过监听队列来控制任务的执行顺序、优先级等,实现更加灵活的任务调度。

2. 使用方法代码片段

1. 消费端

  1. 在配置文件中添加队列配置,console/config/main.php
//配置
'bootstrap' => [            
    'log',             
    'queueConf', // 把这个组件注册到控制台        
],        
'redisConf' => [            
    'class' => 'yii\redis\Connection',            
    'hostname' => '127.0.0.1',            
    'port' => 6379,            
    'database' => 0        
],        
'queueConf' => [            
    'class' => yii\queue\redis\Queue::class,            
    'redis' => 'redisConf', // 队列使用的redis            
    'as log' => \yii\queue\LogBehavior::class, //日志            
    'channel' => 'queueConf',        
],

   2. 添加配置之后可以运行./yii myqueue/info,可以看到队列当前状态

   3. 启动./yii myqueue/listen 开始监听,可启动多个进程同时消费

2. 生产端

1.在写队列的模块下,也添加配置,这里不需要加 bootstrap

'conf_redis' => [            
    'class' => 'yii\redis\Connection',            
    'hostname' => '127.0.0.1',            
    'port' => 6379,            
    'database' => 0        
],        
'queue_conf' => [            
    'class' => yii\queue\redis\Queue::class,            
    'redis' => 'conf_redis', // 队列使用的redis            
    'as log' => \yii\queue\LogBehavior::class,            
    'channel' => 'queue_conf',        
],

2.在common/jobs下,新建一个Job文件,在execute方法中添加要处理的业务逻辑

<?php

namespace common\jobs;

use yii\base\BaseObject;
use yii\queue\JobInterface;



class TestJob extends BaseObject implements JobInterface{    
    public $orderId;    

    /**     
    * @param Queue $queue which pushed and is handling the job     
    */    
    public function execute($queue)    {        
        // 业务逻辑        
        $time = time();        
        $msg =  "时间:{$time},队列-订单号:{$this->orderId}\n";
        file_put_contents('/tmp/testjob.log',$msg, FILE_APPEND);    
    }
}

3.写入队列

<?php

 for($i=0; $i < 10; $i++) {            
    Yii::$app->queue_conf->push(new TestJob([
        'orderId' => $timestamp . $i,            
    ]));        
 }

4.延时执行
<?php

// 5秒后执行
Yii::$app->queue_conf->delay(5)->push(new TestJob([                
    'orderId' => $timestamp . $i,            
]));

3. 调试方法

配置sync,任务可以同步执行,便于调试

<?php
 
'myqueue' => [            
    'class' => \yii\queue\sync\Queue::class,            
    'handle' => true, // 任务是否立即执行        
],

4. 更多参考

    Yii2官方手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1410646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML-表格

表格 1.基本结构 一个完整的表格由&#xff1a;表格标题、表格头部、表格主体、表格脚注&#xff0c;四部分组成 表格涉及到的标签&#xff1a; table&#xff1a;表格 caption&#xff1a;标题 thead&#xff1a;表格头部 tbody&#xff1a;表格主体 tfoot&#xff1a;表格注…

精酿啤酒的原料供应链:质量控制的重要性

对于啤酒的品质和口感&#xff0c;原料供应链的质量控制是重要的。特别是对于Fendi Club这样品质的啤酒&#xff0c;其原料供应链的管理更是重中之重。下面&#xff0c;我们将深入探讨Fendi Club啤酒如何对其原料供应链进行质量控制&#xff0c;以确保啤酒的品质和口感。 首先&…

Matlab|含风电-光伏-光热电站电力系统N-k安全优化调度模型

目录 1 主要内容 程序算例 程序模型 程序亮点 2 部分程序 3 部分结果 4 下载链接 1 主要内容 该程序参考《光热电站促进风电消纳的电力系统优化调度》光热电站模型&#xff0c;主要做的是考虑N-k安全约束的含义风电-光伏-光热电站的电力系统优化调度模型&#xff0c;从而…

OllyDbg动态调试检测方案

据游戏工委数据统计&#xff0c;2023年国内客户端游戏市场实际销售收入达662.83亿元&#xff0c;同比增长8%。PC端游戏实际收入已连续4年实现增长&#xff0c;主要得益于现有的游戏收入持续增长以及更多新品在PC端同步发行等因素。 2023 PC端游戏市场实际销售收入 随着PC端游戏…

【JS】事件汇总(方便查找)

文章目录 一、鼠标事件二、键盘事件2.1、按下键盘键&#xff08;keydown&#xff09;2.2、抬起键盘键&#xff08;keyup&#xff09;2.3、按下有效键&#xff08;keypress&#xff09;2.4、常见键盘码&#xff08;了解&#xff09; 三、焦点事件3.1、聚焦&#xff08;focus&…

LC每日一题 2024/1/25 2859. 计算 K 置位下标对应元素的和

目录 题干 思路 代码 题干 思路 简单的位运算&#xff0c;就是寻找这个数对应的二进制中的1的个数是否与k相同&#xff0c;如果相同&#xff0c;就把这个数加到结果当中 可能涉及到的方法&#xff1a;Integer.bitCount() -->计算出二进制中包含的1的个数 代码 调用Java…

AI新工具(20240124) ComfyUI-InstantID-ComfyUI下的非官方InstantID实现;Lumiere是由谷歌时空扩散模型

ComfyUI-InstantID-ComfyUI下的非官方InstantID实现 ComfyUI InstantID是对InstantID的非官方实现&#xff0c;支持本地和huggingface hub模型&#xff0c;同时支持通用styler。它包括基础模型加载、InsightFace模型加载、ID ControlNet模型加载、Ipadapter_instantid模型加载…

银行数据仓库体系实践(6)--调度系统

调度系统是数据仓库的重要组成部分&#xff0c;也是每个银行或公司一个基础软件或服务&#xff0c;需要在全行或全公司层面进行规划&#xff0c;在全行层面统一调度工具和规范&#xff0c;由于数据类系统调度作业较多&#xff0c;交易类系统批量优先级高&#xff0c;为不互相影…

【算法分析与设计】二叉树的层序遍历

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xf…

互联网泛人才流动报告:大厂扩张按下暂停键,这家公司逆势给出5w月薪招人

前段时间&#xff0c;脉脉高聘人才智库发布了《2023年互联网泛人才流动报告》&#xff0c;似乎佐证了23年是互联网真正的寒冬…… 卷生卷死&#xff01;5个人竞争2个岗位 2023年&#xff0c;互联网行业的求职难度可以说是地狱级别&#xff0c;人才供需比持续上升&#xff0c;…

【vue】Vue2和Vue3中的代码逻辑复用对比(mixins、自定义hook):

文章目录 一、前言&#xff1a;二、mixins&#xff1a;【1】mixins是什么&#xff1f;【2】mixins如何使用&#xff1f;【3】mixins的一些特性&#xff1a;【4】mixins的缺点&#xff1a; 三、hook&#xff1a;【1】Vue3.x中的自定义hook函数是什么&#xff1f;【2】mixins和Co…

log4j2配置文件命名及优先级

log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式&#xff0c;2.x版本配置文件后缀名只能为".xml",“.json"或者”.jsn"。 命名规则 默认配置文件名&#xff1a; log4j2.xml 或 log4j2.json 测试或特定环境配置文件名&#xff1a;可以以 -t…

无人机航迹规划(七):五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、五种算法&#xff08;DBO、LO、SWO、COA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启…

小程序样例3:根据日历创建待办事项

基本功能 1、待办事项查看 选择不同的日期显示不同的待办: 2、选择日期后 新增事项&#xff1a; 3. 点击事项&#xff0c;查看详情 4、删除事项&#xff1a;删除事项3之后&#xff0c;剩余事项2 5、点击日期可以选择更多的月&#xff1a; 实现思路&#xff1a; 1、数据结构&a…

.zip 文件和 .tar.gz文件 的区别

tgz和zip两种压缩格式,其实这两个压缩文件里面包含的内容是一样的,只是压缩格式不一样. tar.gz格式的文件比zip文件要小不少。tar.gz压缩格式用于unix的操作系统, 而zip用于windows的操作系统,但在windows系统中WinRar工具同样可以解压缩tar.gz格式的。 扩展&#xff1a; z…

使用Dockerfile来构建服务的镜像,并部署在容器中

构建服务镜像和容器化部署 一、构建服务镜像1、编写Dockerfile2、构建脚本3、启动脚本 二、问题及解决办法1、no main manifest attribute, in /chatgpt-api-1.0-SNAPSHOT.jar2、如果是SpringBoot项目&#xff0c;应该这么做&#xff1a; 一、构建服务镜像 1、编写Dockerfile …

代码随想录算法训练营第29天 | 491.递增子序列 46.全排列 47.全排列II

非递减子序列 这道题与子集II比较相似&#xff0c;子序列也是子集&#xff0c;而且这里数组中也包含重复元素。但是这道题要有序的序列&#xff0c;所以不能对原来的数组先进行排序。但我们前一篇文章总结过&#xff1a;子集问题中涉及重复元素时&#xff0c;是需要排序的。 这…

pdf添加页眉的4种工具!

在现代数字化的世界中&#xff0c;PDF格式已经成为最常用的文件格式之一&#xff0c;它不仅易于阅读&#xff0c;还具有良好的兼容性。然而&#xff0c;有时候我们需要对PDF文件进行一些修改&#xff0c;例如添加页眉。那么&#xff0c;我们该如何实现这一目标呢&#xff1f;今…

按键协管指南针加速计陀螺仪GPS等原理图纸2

1.imu电路。 加速计包含重力感应。 到传感器芯片u8, U16, U18的信息都是用的spi接口&#xff0c;如下图所示。OSCAR_TO_IMU_SPI_SCLK_FL, IMU_TO_OSCAR_SPI_MISO_FL, OSCAR_TO_IMU_SPI_MOSI_FL接了u8, u16, u18,通过片选信号cs选择哪个芯片接收。 加速计&#xff0c;陀螺仪&…

【开源】基于JAVA+Vue+SpringBoot的音乐平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首音乐4.2 新增音乐4.3 新增音乐订单4.4 查询音乐订单4.5 新增音乐收藏 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的音乐平台&#xff0c;包含了音乐…