美文网首页
easyswoole如何实现Redis队列消费/自定义进程

easyswoole如何实现Redis队列消费/自定义进程

作者: 我爱张智容 | 来源:发表于2021-07-20 09:42 被阅读0次

定义消费进程逻辑

<?php
namespace App\Process;
use EasySwoole\Component\Process\AbstractProcess;
use Swoole\Process;
class Consumer extends AbstractProcess
{
    private $isRun = false;
    public function run($arg)
    {
        /*
         * 举例,消费redis中的队列数据
         * 定时500ms检测有没有任务,有的话就while死循环执行
         */
        $this->addTick(500,function (){
            if(!$this->isRun){
                $this->isRun = true;
                $redis = new \redis();//此处为伪代码,请自己建立连接或者维护redis连接
                while (true){
                    try{
                        $task = $redis->lPop('task_list');
                        if($task){
                            // do you task
                        }else{
                            break;
                        }
                    }catch (\Throwable $throwable){
                        break;
                    }
                }
                $this->isRun = false;
            }
            var_dump($this->getProcessName().' task run check');
        });
    }
    public function onShutDown() { }
    public function onReceive(string $str, ...$args) { }
}

注册消费进程
在EasySwoole的全局事件中,注册消费进程。

<?php
use App\Process\Consumer ;
use EasySwoole\Component\Process\Manager;
use EasySwoole\EasySwoole\Swoole\EventRegister;
public static function mainServerCreate(EventRegister $register)
{
    $allNum = 3; // 注册三个消费进程
    for ($i = 0 ;$i < $allNum;$i++){
        $processConfig= new \EasySwoole\Component\Process\Config();
        $processConfig->setProcessName('ConsumerProcess'.$i);//设置进程名称
        Manager::getInstance()->addProcess(new Consumer ($processConfig));
    }
}

相关文章

网友评论

      本文标题:easyswoole如何实现Redis队列消费/自定义进程

      本文链接:https://www.haomeiwen.com/subject/tpslmltx.html