php think 通过Redis实现发布订阅功能

查看php think list 是否安装,没有composer安装一下
在这里插入图片描述
然后再command下面添加一个执行文件
可配置后台执行

/**
 * redis 订阅
 */
class RedisSub extends Command
{


    protected function configure()
    {
        // 指令配置
        $this->setName('redissub')
            ->addOption('mode', 'm', Option::VALUE_OPTIONAL, 'daemon(守护进程)方式启动')
            ->setDescription('the redissub command');
    }

    protected function execute(Input $input, Output $output)
    {
        // 指令输出
        $output->writeln('redissub:execute');
        $redis = new RedisUtils();
        $redis->setOption(RedisUtils::OPT_READ_TIMEOUT, -1);
        $channels = Config::get("channels");
//        Log::info('redis订阅中,等待消息消费');
        $redis->subscribe($channels, function ($redis, $channel, $msg){
            // 消费订阅消息的逻辑
            //Log::info('消费channels:'.$channel.'===msg:'.json_encode($msg));
            switch ($channel){
                case 'cti_qc':
                    //语音质检
                    $services = app()->make(\app\common\service\QcService::class);
                    $services::ctiMessage($msg);
                    break;
                case 'cdr':
                    // 话单处理
                    $services = app()->make(\app\common\service\QcService::class);
                    $services::cdrConsumer($msg);
                    break;
            }
        });

    }

}

执行php think redissub
在这里插入图片描述
可配置守护进程后台执行

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐