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持久化!
本文来自博客园,作者:wekyun,转载请注明原文链接:https://www.cnblogs.com/wekyun/articles/16619312.html