1. 程式人生 > >php使用redis作為訊息佇列--守護程序模式執行

php使用redis作為訊息佇列--守護程序模式執行

 

出隊指令碼

編寫指令碼,通過crontab定時執行指令碼,從list的右邊取出錯誤處理。

這種方式的優點是不會出現資料的丟失,只有定時指令碼處理完相關資訊之後,才從佇列中取出;缺點也是顯而易見的,響應不夠及時,因為是定時訪問redis的list隊形,所以不能實時的處理佇列中的訊息。

$params = $redis->Rpop($key);

php實現

$redis = new Redis();

$redis->pconnect(RedisConfig::SERVERNAME, RedisConfig::PORT) or die("redis error connecting");

while(true){
    try {
    	$json = $this->redis->brPop('key', 0);//0表示無限阻塞等待
        //dosomething
    }
}

我們為了防止指令碼意外終止(發生錯誤等情況)不再工作,我們寫一個定時任務監控該指令碼的執行情況。

monitor.sh

#!/bin/bash
alive=`ps aux|grep **|grep -v grep|wc -l`
if [ $alive -eq 0 ]
then
nohup /usr/local/php-7.1/bin/php /**/**.php >> /**/**.log 2>&1 &
fi

1分鐘檢查一次 

crontab -e
*/1 * * * * /var/www/monitor.sh