国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

使用webman/redis-queue 偶爾會出現入隊成功了,但是沒執(zhí)行

wenhehe

問題描述

用的Redis::send同步投遞方式,并且投遞失敗會記錄日志。
消費隊列消費成功或者失敗也會記錄日志
偶爾會出現沒有投遞失敗的日志,但是某條隊列似乎也沒執(zhí)行,也沒有隊列異常的日志,查看redis隊列里也沒有數據了

補充:
記錄日志代碼:
入隊日志記錄代碼:
截圖
消費隊列日志:
截圖
日志記錄:
漏掉了393853,也沒有入隊失敗的記錄,消費隊列也沒有日志,是隊列沒進入成功嗎
截圖

05-22最新測試:

有記錄到396483入隊成功,卻沒有消費的記錄
截圖
下面是日志記錄的代碼:
投遞隊列記錄日志:
截圖
消費隊列記錄日志:
截圖

5-22最新日志截圖

截圖

1095 2 0
2個回答

walkor 打賞

redis里沒數據就說明消息被取走執(zhí)行了?;蛘遰edis沒設置落地磁盤重啟消息丟失了

  • wenhehe 2024-05-20

    大佬,redis沒有重啟,需要怎么排查這個問題,請教一下

  • walkor 2024-05-20

    記錄日志,投遞和消費都記錄

  • wenhehe 2024-05-20

    好的,謝謝,我消費也記錄下日志

  • wenhehe 2024-05-21

    消費也記錄日志了,但是確實出現了,消費日志也沒有,這種是什么情況呢

  • wenhehe 2024-05-21

    大佬,我把截圖補充在問題里了

  • walkor 2024-05-21

    入隊列也要記錄日志

  • wenhehe 2024-05-21

    入隊有記錄日志了

  • walkor 2024-05-21

    截圖下證明入隊列了

  • wenhehe 2024-05-21

    Redis::send($queue, $queue_data);返回false或者拋異常都會記錄,上面的截圖有

  • wenhehe 2024-05-21

    Redis::send($queue, $queue_data);如果返回true能證明入隊嗎,我現在隊列里找不到這條,時間也過去一個多小時了

  • walkor 2024-05-21

    不,你要證明393853入隊列了,在Redis::send() 后記錄。

  • walkor 2024-05-21

    還有,如果order_id是數據庫里的某個表的字段,看下數據庫里對應的order_id為393853數據是否存在。

  • wenhehe 2024-05-21

    393853數據在數據庫是存在的

  • wenhehe 2024-05-21

    $queue_res = Redis::send($queue, $queue_data);
    if (!$queue_res) {
    Log::error($mer_id . '|' . $merchant_order_no . '|入隊失敗' . $queue_res);
    }
    Log::info('入隊成功|'.$order_id);
    這樣寫能證明入隊成功嗎

  • walkor 2024-05-21

    能證明成功,但是不能證明 393853 那條執(zhí)行過 Redis::send 入隊列

  • wenhehe 2024-05-21

    文檔上不是說投遞成功Redis::send() 返回true,否則返回false或者拋出異常。我記錄了返回值和捕獲這個異常,如果都沒有錯誤記錄能確定入隊成功嗎,還是要怎么樣才能確定入隊成功呢

  • wenhehe 2024-05-21

    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被認定為入隊成功?

  • walkor 2024-05-21

    拋異常不會返回true

  • walkor 2024-05-21

    如果是在控制器里投遞消息,拋異常你沒捕獲的話框架會在rutime/logs/webman-xx.log 里記錄日志

  • wenhehe 2024-05-21

    我在執(zhí)行隊列的方法處也有捕獲了異常,但是沒有記錄到異常

  • wenhehe 2024-05-21

    Redis::send() 返回true能保證一定入隊成功嗎

  • walkor 2024-05-21

    保證

  • wenhehe 2024-05-21

    好的,那我在Redis::send()后記錄下返回值,再消費隊列記錄下日志,這樣再觀察下情況

  • wenhehe 2024-05-22

    新的測試結果記錄在5-22了,確實出現有入隊了,Redis::send() 返回true,但是消費隊列沒有執(zhí)行到

  • walkor 2024-05-22

    日志再往上截圖一段,看到396482先出現了消費,后出現了入隊列,順序不對。
    另外執(zhí)行 ps auxf,看下系統(tǒng)里是不是有其它消費進程開著沒關閉,或者其它服務器有開著消費進程沒關閉。

  • wenhehe 2024-05-22

    最新的日志已發(fā)出,日志上顯示先消費后入隊,是因為先執(zhí)行入隊,然后記錄日志,隊列也同時在那一秒執(zhí)行了,并發(fā)寫入日志導致出現順序不對的嗎?這個隊列消費進程我是開了10個,沒有別的消費進程了

  • wenhehe 2024-05-22

    這個情況也不是經常發(fā)生,有的時候幾萬條才會出現一次,有的時候幾千條出現一次

  • walkor 2024-05-22

    截圖
    看下其它日志文件例如 workerman.log 等這個時間點有沒有什么日志出現

  • wenhehe 2024-05-22

    已檢查過了,其他日志都沒記錄

  • walkor 2024-05-22

    看不出來什么問題,我本地用100萬條測試了下,也沒有丟失
    截圖

  • wenhehe 2024-05-22

    好的,謝謝老大,我再測試下

  • wenhehe 2024-05-23

    老大,你在本地投入一百萬條隊列是一個進程處理投遞隊列,一個進程消費隊列嗎

  • walkor 2024-05-23

  • wenhehe 2024-05-26

    今天仔細檢查了一下,好像是有入隊,但是消費隊列的代碼執(zhí)行一半就消失了,會有這種可能嗎

aacsok

樓主,問題解決沒?

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??