用的Redis::send同步投遞方式,并且投遞失敗會記錄日志。
消費隊列消費成功或者失敗也會記錄日志
偶爾會出現沒有投遞失敗的日志,但是某條隊列似乎也沒執(zhí)行,也沒有隊列異常的日志,查看redis隊列里也沒有數據了
補充:
記錄日志代碼:
入隊日志記錄代碼:
消費隊列日志:
日志記錄:
漏掉了393853,也沒有入隊失敗的記錄,消費隊列也沒有日志,是隊列沒進入成功嗎
有記錄到396483入隊成功,卻沒有消費的記錄
下面是日志記錄的代碼:
投遞隊列記錄日志:
消費隊列記錄日志:
redis里沒數據就說明消息被取走執(zhí)行了?;蛘遰edis沒設置落地磁盤重啟消息丟失了
$queue_res = Redis::send($queue, $queue_data);
if (!$queue_res) {
Log::error($mer_id . '|' . $merchant_order_no . '|入隊失敗' . $queue_res);
}
Log::info('入隊成功|'.$order_id);
這樣寫能證明入隊成功嗎
文檔上不是說投遞成功Redis::send() 返回true,否則返回false或者拋出異常。我記錄了返回值和捕獲這個異常,如果都沒有錯誤記錄能確定入隊成功嗎,還是要怎么樣才能確定入隊成功呢
protected function execCommand($command, ...$args)
{
try {
return $this->{$command}(...$args);
} catch (\Throwable $e) {
$msg = strtolower($e->getMessage());
if ($msg === 'connection lost' || strpos($msg, 'went away')) {
$this->connectWithConfig();
return $this->{$command}(...$args);
}
throw $e;
}
}
這個是寫入redis的代碼嗎,如果拋出異常是否也會返回true被認定為入隊成功?
日志再往上截圖一段,看到396482先出現了消費,后出現了入隊列,順序不對。
另外執(zhí)行 ps auxf,看下系統(tǒng)里是不是有其它消費進程開著沒關閉,或者其它服務器有開著消費進程沒關閉。
最新的日志已發(fā)出,日志上顯示先消費后入隊,是因為先執(zhí)行入隊,然后記錄日志,隊列也同時在那一秒執(zhí)行了,并發(fā)寫入日志導致出現順序不對的嗎?這個隊列消費進程我是開了10個,沒有別的消費進程了