php 后台怎么开一个进程监听Redis的队列消息呢?用while?

我知道Redis的list有pub/sub模式,但是php 后台怎么开一个进程监听Redis的队列消息呢?用while循环吗?这样是不是不太好

阅读 9.7k
7 个回答
while($res = Redis::blpop($key)) {
    doJob($res);
}

redis的subscribe用pconnect链接,执行这个脚本的进程会自动监听所订阅的频道发送的消息

ini_set(‘default_socket_timeout’, -1);

$redis = new \Redis();
$redis->pconnect('127.0.0.1', 6379);

//订阅
$redis->subscribe(['msg'], 'callfun');

function callfun($redis, $channel, $msg)
{
  var_dump([
    'redis' => $redis,
    'channel' => $channel,
    'msg' => $msg
  ]);
}

Redis有阻塞原语读取队列,队列没有数据时,php监听进程会挂起

while + sleep 没啥问题

通过pcntl_fork系列方法开启守护进程,监听请求。
redis队列有操作是发送请求到监听端口,同时处理历史失败消息队列。

在服务器后台挂个进程去监控就好,supervisor,就算挂了也会自动重启

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题