老雷PHP教程之隊(duì)列任務(wù)
老雷PHP教程之隊(duì)列任務(wù)
一、什么是隊(duì)列任務(wù)
? ? 就是按照隊(duì)列來(lái)執(zhí)行任務(wù),按照先進(jìn)先出原則執(zhí)行任務(wù),通過(guò)異步執(zhí)行提升用戶體驗(yàn)。
二、實(shí)現(xiàn)步驟,以訂單為例。
? ? 1、發(fā)布任務(wù)
????????????用戶下完單之后,可能需要短信通知商家,或者通知打印機(jī)打印訂單。
? ? 2、獲取任務(wù)
????????????任務(wù)系統(tǒng)獲取任務(wù),然后分發(fā)給不同任務(wù)處理程序去執(zhí)行。
? ? 3、執(zhí)行任務(wù)
????????具體任務(wù)處理程序,接收來(lái)自隊(duì)列任務(wù)的委派,然后執(zhí)行,如果執(zhí)行出錯(cuò),判斷是重新入隊(duì)執(zhí)行還是通知系統(tǒng)出現(xiàn)異常。
三、任務(wù)要常駐執(zhí)行
? ? 執(zhí)行任務(wù)的程序不能間斷
? ? windows系統(tǒng) cmd 執(zhí)行 php task.php?
? ? linux系統(tǒng) php task.php &?
require "file.php";$que=new queue();$task=$que->rpop();if(empty($task)){echo "任務(wù)執(zhí)行完了";}switch($task["action"]){case "sendSms":$res=sendSms($que,$task);break;default:echo "執(zhí)行任務(wù)";break;}function sendSms($que,$task){$conf=$task["data"];$res=rand(0,1);if(!isset($task["enum"])){$task["enum"]=1;}if(!$res){echo "執(zhí)行任務(wù)出錯(cuò),出錯(cuò)".$task["enum"]."次";}else{echo "給".$conf["telephone"]."發(fā)送了一條短息".$conf["content"];}if($res==false ){if($task["enum"]<3){$task["enum"]++;$que->rpush($task);}else{echo " 已將錯(cuò)誤反饋給站長(zhǎng)";}}}
課后作業(yè):
?大家去動(dòng)手操作隊(duì)列任務(wù)
評(píng)論
圖片
表情
