架構(gòu)背景:
瀏覽器/app <-- http -> Web請(qǐng)求處理層 <-- RPC --> Workerman-RPC業(yè)務(wù)邏輯處理層
業(yè)務(wù)說(shuō)明:
數(shù)量一定的商品,用戶需要對(duì)該商品預(yù)約下單購(gòu)買(mǎi),預(yù)約成功后必須在30min內(nèi)支付購(gòu)買(mǎi)。用戶預(yù)約后,商品對(duì)外供應(yīng)數(shù)量減少1;當(dāng)用戶在30min時(shí)限內(nèi)沒(méi)有支付購(gòu)買(mǎi),商品對(duì)外供應(yīng)數(shù)量恢復(fù)1。
實(shí)現(xiàn):
上述業(yè)務(wù)邏輯在 Workerman-RPC框架的的Order服務(wù)實(shí)現(xiàn);當(dāng)用戶預(yù)約成功后,是否可以在Order服務(wù)內(nèi)通過(guò)Timer::add()添加一個(gè)定時(shí)器,30min后來(lái)處理 “用戶在30min時(shí)限內(nèi)沒(méi)有支付購(gòu)買(mǎi),商品對(duì)外供應(yīng)數(shù)量恢復(fù)1?!? 的邏輯。
另外對(duì)于Timer阻塞進(jìn)程有個(gè)疑問(wèn): Timer本身并不會(huì)阻塞進(jìn)程,只是Timer觸發(fā)的任務(wù)會(huì)阻塞進(jìn)程?
Timer觸發(fā)的時(shí)候會(huì)阻塞進(jìn)程。
沒(méi)有被觸發(fā)不會(huì)阻塞進(jìn)程。
感覺(jué)crontab更適合你的業(yè)務(wù)。每分鐘運(yùn)行一次。
使用Workerman-RPC做這個(gè)業(yè)務(wù)有個(gè)風(fēng)險(xiǎn),如果業(yè)務(wù)代碼有致命錯(cuò)誤,會(huì)導(dǎo)致進(jìn)程退出,進(jìn)而導(dǎo)致定時(shí)器丟失。
恩,謝謝!這兩天調(diào)試的時(shí)候也發(fā)現(xiàn)進(jìn)程結(jié)束會(huì)導(dǎo)致進(jìn)程中所有定時(shí)器丟失這個(gè)問(wèn)題。