其中有几个关键点记录一下</p>
//阻塞获取,默认等待3秒,如果没有那么循环一次
$result =$model->brPop($QUEUENAME, 3);
使用此方式可以防止快速多次扫描redis
if(function_exists(“pcntl_signal”))
{
declare(ticks = 1);
pcntl_signal(SIGTERM,”signal”);
pcntl_signal(SIGINT,”signal”);
pcntl_signal(SIGINT,”signal”);
functionsignal($signo) {
global $RUNNING_FLAG;
switch ($signo) {
case SIGINT:
case SIGKILL:
case SIGTERM:
if($RUNNING_FLAG){
//第一次接收到,那么等执行完毕退出
$RUNNING_FLAG=false;
echo “first time close.. \r\n”;
}else{
//第二次接收到,直接退出
echo “shutdown …\r\n”;
exit;
}
break;
}
}
}
使用此方式可以防止队列任务正在执行时被退出
使用shell脚本可以监视当前有多少个消费进程在跑
#通用高优先级队列,对响应要求较高可以放这里
high_count=4;
high_currcount=`ps -ef|grep “queue.php high”|grep -v grep|wc-l`;
if [ “$high_currcount” -lt “$high_count” ];then
for((i=$high_currcount;i<$high_count;i++));
do
phpxxxxx/queue/queue.php high >/dev/null 2>&1 &
done
fi