yii2-queue队列的使用
2023-06-13 09:14:40 时间
安装
composer require yiisoft/yii2-queue
配置
//cat config/console.php
return [
'bootstrap' => [
'queue',
],
'components' => [
'redis' => [
'class' => 'yii\redis\Connection',
'hostname' => 'docker-redis',
'port' => 6379,
'database' => 0,
'retries' => 1,
],
// 'queue' => [
// 'class' => \yii\queue\file\Queue::class,
// ],
'queue' => [
'class' => \yii\queue\redis\Queue::class,
'redis' => 'redis', // Redis connection component or its config
'channel' => 'queue', // Queue channel key
],
],
];
创建任务
任务1
<?php
namespace app\job;
use yii\base\BaseObject;
class Download extends BaseObject implements \yii\queue\JobInterface {
public $url;
public $file;
public function execute($queue) {
file_put_contents($this->file, file_get_contents($this->url));
}
}
任务2
<?php
namespace app\job;
class SendEmail extends \yii\base\Component implements \yii\queue\JobInterface {
public $url;
public $title;
public function execute($queue) {
file_put_contents($this->url,"email") ;
}
}
将任务添加到队列,等待执行
\Yii::$app->queue->push(new Download([
'url' => 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png',
'file' => \Yii::getAlias("@app/runtime/down/bd.jpg"),
]));
//delay单位为秒
$rs = \Yii::$app->queue->delay(10)->push(new SendEmail([
'url' => \Yii::getAlias("@app/runtime/mail/aaa"),
'title'=>123,
]));
var_dump($rs);
执行任务
将队列里的任务执行一遍,时候做计划任务
./yii queue/run
创建一个守护进程,实时监听队列,有新任务就执行
./yii queue/listen //实时监听
./yii queue/listen 5 //每隔5s监听一次队列
其他命令
yii queue/info 查看队列状态
yii queue/clear 清空队列
yii queue/remove [id] 移除某个任务
参考
https://github.com/yiisoft/yii2-queue/blob/master/docs/guide/driver-redis.md
相关文章
- 如何实现一个双端队列?
- 什么是阻塞队列
- 04 环形队列
- redis实现消息队列
- 【数据结构初阶】一文详解顺序栈和链队列的基本操作
- 数据结构实验之栈与队列四:括号匹配(SDUT 2134)
- 【Linux 内核】实时调度类 ④ ( 实时运行队列 rt_rq 源码分析 | 实时运行队列 rt_rq 结构体字段分析 | active、rt_nr_running、curr、next 字段 )
- 【数据结构】优先级队列(堆)
- RabbitMQ 高可用实现镜像队列
- 红色警报:Redis阻塞队列的危机(redis阻塞队列)
- 使用celery和redis提高消息队列处理效率(celery和redis)
- MySQL队列技术让C程序轻松实现异步处理(c mysql 队列)
- 监控Redis队列的变化情况(监听redis队列)
- Redis实现电商秒杀队列实时排单(电商秒杀队列redis)
- 基于分布式Redis队列的应用实践(分布式redis队列)
- Java实现Redis队列锁功能(redis队列锁java)
- Redis队列清空任务的简易方法(redis队列清空)
- 超时Redis队列消费是否存在超时问题(redis队列是否有消费)
- 数Redis队列总元素数量分析(redis 队列 总元素)
- 值破解Redis缓存获取所有队列值(redis 获取所有队列)
- 用C++实现队列的程序代码