今天后臺看到訊息佇列停了,上伺服器看訊息佇列程式還在執行,檢視日誌後發現下面的報錯
local.ERROR: Cannot use object of type Predis\Response\Status as array {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Cannot use object of type Predis\\Response\\Status as array at /home/web/superAdminAPI/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php:230)
在predis的提問中發現是redis事務的問題
相關連結github.com/nrk/predis/issues/459
追蹤後臺程式碼,發現有一塊程式碼在異常捕獲中沒有取消redis事務
修改後
/**
* 訂單取消
* Create by Peter
*/
function order_cancel($user_id,$order_id){
try {
\DB::beginTransaction();
Redis::multi();
//業務
if(!$order_info) throw new \Exception('該訂單不可取消');
\DB::commit();
Redis::exec();
} catch (Exception $exception) {
\Log::debug($exception->getMessage());
Redis::discard();
\DB::rollBack();
}
}
搞不清楚為什麼不取消事務會導致訊息佇列停止,有誰遇到過的嗎?
推薦一下管理程式的工具
程式管理
本作品採用《CC 協議》,轉載必須註明作者和本文連結