redis消息订阅没有消息确认机制,想要更为可靠的消息订阅服务应考虑使用rabbitMQ
消息生产
使用 publish 向频道生产消息
$redis = new Redis();
$redis->connect('127.0.0.1', 6379, 1);//host port 超时时间
$redis->select(0);
for($i=0;$i<=10;$i++){
$redis->publish('send_Collect', '消息--------'.$i);//channel 消息内容
}
消息订阅端
这里处理的是产生的消息(注意redis6.0一下版本使用的是单线程,所以执行多个处理消费的仍然是同一条消息)
$redis = new Redis();
$res = $redis->pconnect('127.0.0.1', 6379);
echo 'redis消息订阅服务已启动'.PHP_EOL;
//设置超时控制
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
$redis->subscribe(array('send_Collect'), 'callback');
// 回调函数,这里写处理逻辑
function callback($instance, $channelName, $message)
{
// echo "channelName: ".$channelName.PHP_EOL;
echo '收到消息正在处理'.PHP_EOL;
var_dump($message);
sleep(1);
/* 处理逻辑 */
echo "处理完成".PHP_EOL;
}