Live2D

PHP使用TP5.X/TP6.X框架开发redis发布订阅功能

1:发布订阅消息的代码(生产者)

/**
     * @title 发布订阅消息
     * @desc 
     * @author hugang
     * @url /admin/Cs/redis
     * @method POST
     * @tag
     */
    public function redis()
    {
        $msg = input('msg', '默认消息');//数据
        $redis = redis(0);//获取redis单例的对象,也可以直接$redis = new \Redis();前提是要有Rdis扩展
        $num = $redis->publish('demo:notice', $msg);//把数据放入reids生产队列
        return success('通知订阅:' . $num);//success是我自定义的返回json的方法
    }

 2:消费者消费队列数据(写成命令行cli运行服务)

下面是自定义命令行

<?php
//这是框架要求这么写的,映射自定义的命令
return [
    'Subscribe' => 'app\cli\Subscribe',
];

下面是实现命令行代码

查看代码
<?php

namespace app\cli;


use think\console\Command;
use think\console\Input;
use think\console\Output;

//命令行自定义指令 php think Subscribe,执行的代码就是execute里面的
class Subscribe extends Command
{
    protected function configure()
    {
        $this->setName('Subscribe')
            ->setDescription('消费订阅');
    }

    protected function execute(Input $input, Output $output)
    {
        //消费队列的业务代码
        $redis = redis();//$redis = new \Redis();
        $redis->subscribe(['demo:notice'], function ($instance, $channel, $msg_data) {
            dump("订阅的消息为:" . $msg_data);
            set_log("订阅的消息为:" . $msg_data);
        });

        $output->writeln('hello');
    }

}

这样就实现了一个简单的发布订阅demo功能,生产的代码可以写在业务中,消费者的代码写好了以后,需要通过命令启动,启动的命令就当看客们的作业了,这个在文档里面就有,这个文章主要给人借鉴和学习,如果学不会可能会用错了。

另外提醒一句,服务启动,服务器环境要做好进程守护哦,也不要忘了做好redis持久化!

posted @ 2022-08-24 11:54  wekyun  阅读(202)  评论(0编辑  收藏  举报