easyswoole 读取处理Redis的发布订阅信息

版本信息

swoole version                4.6.7
php version                   7.4.20
easyswoole version            3.4.6

场景   以前总是用python 去处理一下redis订阅发布的数据信息   现在使用Eayswoole 框架的自定义进程  消费其订阅发布的信息 进而处理数据。

步骤如下:

在其App/Process 目录下 新增对象文件 如ToSubscribeRedis.php

<?php

namespace App\Process;

use EasySwoole\Component\Process\AbstractProcess;
use EasySwoole\EasySwoole\Config;

use Swoole\Coroutine;
use Swoole\Process;
use EasySwoole\RedisPool\RedisPool;

class ToSubscribeRedis extends AbstractProcess
{
    public $dev;

    protected function run($arg)
    {
        //$redis = RedisPool::defer("redis");
        var_dump('### 开始运行redis自定义进程 start ###');
       
        go(function () {
            $redis = RedisPool::defer("redis");
            $redis->subscribe(function (\EasySwoole\Redis\Redis $redis, $pattern, $str) {
               
                $info = json_decode($str, true);
                var_dump($info);
                // $data = $redis->unsubscribe('subscribe_name');
                //$redis->setSubscribeStop(true);
                Coroutine::sleep(1);
            }, 'subscribe_name');
        });
    }

    public function onShutDown()
    {
        // TODO: Implement onShutDown() method.
    }

    public function onReceive(string $str, ...$args)
    {
        // TODO: Implement onReceive() method.
    }
}

其中的var_dump($info); 就是其redis订阅发布的信息

重点:

在上面新建好ToSubscribeRedis.php 代码后,还需要注册  还可以使用!!

在框架根目录  EasyswooleEvent.php 中  在其mainServerCreate方法中添加如下行:

\EasySwoole\Component\Process\Manager::getInstance()->addProcess(new \App\Process\ToSubscribeRedis ('sub'));

完整的伪代码 如下:

<?php

namespace EasySwoole\EasySwoole;


use App\WebSocket\TCPParser;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Config;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;


class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        date_default_timezone_set('Asia/Shanghai');
        // 加载Config下所有配置
        self::loadConfig();
       
    }

    public static function mainServerCreate(EventRegister $register)
    {
        //此处省略N多代码  ....   
       
        //注册redis订阅进程   读取redis 发布订阅信息
        \EasySwoole\Component\Process\Manager::getInstance()->addProcess(new \App\Process\ToSubscribeRedis('sub'));

    }

  
    public static function loadConfig()
    {
        Config::getInstance()->loadDir(EASYSWOOLE_ROOT . '/Config');
    }
}

然后重启框架

php easyswoole server start

就可以看到打印的那个信息了 。


 

posted @ 2022-01-25 18:04  树下水月  阅读(57)  评论(0编辑  收藏  举报