redis实现MQTT模型订阅分布

2020-10-03  本文已影响0人  骑蚂蚁上高速_jun

订阅发布其实也是属于一种特殊的消息队列Queue机制,与redis的普通队列list区别在于,如果订阅端存在多个消费端的情况下。每个消费订阅端都会执行 发布端的消息业务。

订阅端代码:

function connectCliRedis():Redis{
    $redis = new Redis();
    $redis->connect("127.0.0.1",6379);
    $redis->setOption(Redis::OPT_READ_TIMEOUT,-1); // 使其守护进程不会出现超时错误
    return $redis;
}
// 连接Redis
$redis = connectCliRedis();
while(true){
    if($redis->ping() != "+PONG"){
        $redis = connectCliRedis();
    }
    $redis->subscribe(['sunsun',"miling"],function(Redis $redis,string $channel,string $message){

        var_dump( $channel, $message);
        sleep(10);
    });
    echo "循环跳出 \n";
}

发布端代码:

$redis = new Redis();
$redis->connect("127.0.0.1",6379);
$redis->setOption(Redis::OPT_READ_TIMEOUT,-1); // 使其守护进程不会出现超时错误
$r1 = $redis->publish("sunsun","这是消息管道 sunsun 的消息");
// 1.当消费管道 sunsun 未启动的时候, 发布的返回值等于0. 返回值是一个int 等于订阅该频道的数量
// 2.发布/订阅模型的消息是不能保留的。

var_dump($r1);

上一篇下一篇

猜你喜欢

热点阅读