V2.0 - 消息队列
yoyocmf 2020-08-13 21:14:11

将任务添加到队列

PHP Code复制内容到剪贴板
  1. Yii::$app->queue->push(new DownloadJob([  
  2.     'url' => 'http://example.com/image.jpg',  
  3.     'file' => '/tmp/image.jpg',  
  4. ]));  

 

将作业推送到队列中延时5分钟运行

PHP Code复制内容到剪贴板
  1. Yii::$app->queue->delay(5 * 60)->push(new DownloadJob([  
  2.     'url' => 'http://example.com/image.jpg',  
  3.     'file' => '/tmp/image.jpg',  
  4. ]));  

注意: 只有一部分驱动支持延时运行。

 

作业状态

该组件具有跟踪被推入队列的作业状态的能力。

PHP Code复制内容到剪贴板
  1. // 将作业推送到队列并获得其ID  
  2. $id = Yii::$app->queue->push(new SomeJob());  
  3.   
  4. // 这个作业等待执行。  
  5. Yii::$app->queue->isWaiting($id);  
  6.   
  7. // Worker 从队列获取作业,并执行它。  
  8. Yii::$app->queue->isReserved($id);  
  9.   
  10. // Worker 作业执行完成。  
  11. Yii::$app->queue->isDone($id);  

注意: RabbitMQ 驱动不支持作业状态。

 

Debug

PHP Code复制内容到剪贴板
  1. $config['modules']['debug'] = [  
  2.     'class' => 'yii\debug\Module',  
  3.     'panels' => [  
  4.         'queue' => \yii\queue\debug\Panel::class,  
  5.     ],  
  6. ];  

 

控制台

控制台用于监听和处理队列任务。

C/C++ Code复制内容到剪贴板
  1. yii queue/listen [wait]  

 

listen 命令启动一个守护进程,它可以无限查询队列。如果有新的任务,他们立即得到并执行。 wait 是下一次查询队列的时间 当命令正确地通过 supervisor 来实现时,这种方法是最有效的。

C/C++ Code复制内容到剪贴板
  1. yii queue/run  

 

run 命令获取并执行循环中的任务,直到队列为空。适用与cron。

run 与 listen 命令的参数:

--verbose, -v: 将执行状态输出到控制台。

--isolate: 详细模式执行作业。如果启用,将打印每个作业的执行结果。

--color: 高亮显示输出结果。

C/C++ Code复制内容到剪贴板
  1. yii queue/info  

 

进程监视器 Supervisor

Supervisor 是Linux的进程监视器。 它会自动启动您的控制台进程。 安装在Ubuntu上,你需要运行命令:

C/C++ Code复制内容到剪贴板
  1. sudo apt-get install supervisor  

 

Supervisor 配置文件通常可用 /etc/supervisor/conf.d。 你可以创建任意数量的配置文件。

配置示例:

C/C++ Code复制内容到剪贴板
  1. [program:yii-queue-worker]  
  2. process_name=%(program_name)s_%(process_num)02d  
  3. command=/usr/bin/php /var/www/my_project/yii queue/listen --verbose=1 --color=0  
  4. autostart=true  
  5. autorestart=true  
  6. user=www-data  
  7. numprocs=4  
  8. redirect_stderr=true  
  9. stdout_logfile=/var/www/my_project/log/yii-queue-worker.log  

 

在这种情况下,Supervisor 会启动4个 queue/listen worker。输出将写入相应日志文件。

有关 Supervisor 配置和使用的更多信息,请参阅文档。

以守护进程模式启动的Worker使用 queue/listen 命令支持 [File]、 [Db]、 [Redis]、 [RabbitMQ]、 [Beanstalk]、 [Gearman] 驱动。 有关其他参数,请参阅驱动程序指南。

 

定时任务监控 Cron

可以用 cron 开始 worker。需要使用 queue/run 命令。只要队列包含作业,它就能进行执行。

配置示例

C/C++ Code复制内容到剪贴板
  1. * * * * * /path-to-your-project/yii queue/run  

 

在这种情况下,cron将每分钟启动一次命令。

queue/run 命令支持 [File]、[Db]、[Redis]、[Beanstalk]、[Gearman]驱动。有关其他选项,请参阅驱动程序指南。

 

 

 

 

 

本文来自于:http://www.yoyo88.cn/note/yoyocmf/535.html

Powered by yoyo苏ICP备15045725号