国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

分享一篇關(guān)于使用阿里云消息隊列中遇到的坑

idealcn / 3240人閱讀

摘要:相信很多小伙伴都在開發(fā)中使用過消息隊列,尤其是高并發(fā)的情況,一般可以在緩存中操作數(shù)據(jù),然后通過消息異步處理業(yè)務(wù)邏輯,操作數(shù)據(jù)庫等。

相信很多小伙伴都在開發(fā)中使用過消息隊列,尤其是高并發(fā)的情況,一般可以在緩存中操作數(shù)據(jù),然后通過消息異步處理業(yè)務(wù)邏輯,操作數(shù)據(jù)庫等。

本人所在的公司使用了阿里云的消息隊列和RabbitMQ,據(jù)說使用阿里云消息隊列的一部分原因是RabbitMQ實現(xiàn)延遲消息比較復(fù)雜,要依賴死信...接下來進(jìn)入主題,說說我是怎么使用消息和遇到的坑吧~

一般來講,我們可以使用一個腳本來接收阿里云消息處理業(yè)務(wù)邏輯,但是如果業(yè)務(wù)量特別大的話,我們可能會遇到一個問題,就是腳本處理不過來,消息積攢的數(shù)量可能遠(yuǎn)遠(yuǎn)超出每秒能夠處理的數(shù)量。針對這種現(xiàn)象,我們可以啟動多個處理腳本來同時處理消息,這樣會明顯加快處理消息的速度。

但是,多個腳本同時從一條消息隊列里面取消息的時候,會不會同時取到同一條消息,然后造成消息重復(fù)處理的現(xiàn)象呢?我覺得肯定是會的,消息是第三方服務(wù),我們無法保證他的100%穩(wěn)定,所以我們需要在處理的時候下點功夫了。

我們發(fā)送消息的數(shù)據(jù)體是json,一般我們會在每條消息里面加一個taskid,以時間戳(精確到毫秒級) + 隨機數(shù)組成,這個taskid足夠長,我們得以保證他不會重復(fù)(重復(fù)的可能性極小,類似于mongodb的主鍵也是這個原理)。

接下來看一段代碼:

try {
    //偽代碼
    $getData    = $mq->receive();
    $getData    = endJsonJson::decode($getData, true);  //如果不是json數(shù)據(jù) 我們可以捕獲到異常

    //先檢測數(shù)據(jù)
    $errorMsg   = [];
    if (!isset($getData["taskid"]) || $getData["taskid"] == "") {
        $errorMsg[]     = "taskid不能為空";
    }

    if (!isset($getData["order_id"]) || $getData["order_id"] == "") {
        $errorMsg[]     = "訂單號不能為空";
    }

    if (!cache()->setex($this->cachePrefix . $getData["taskid"], 1)) {
        $errorMsg[]     = "該任務(wù)已被處理";
    }

    if (count($errorMsg) >= 1) {
        //記日志  方便排錯
        $this->log("xxxx處理腳本錯誤 哪個文件 錯誤級別 錯誤原因" . implode("|", $errorMsg));
        return false;
    }

    //必須有過期時間  不然會把redis撐爆
    cache()->expire($this->cachePrefix . $getData["taskid"], 7 * 86400);

    /**
     * 處理業(yè)務(wù)邏輯
     */
    
    //業(yè)務(wù)邏輯處理正常,刪除redis鎖,刪除消息
    cache()->del($this->cachePrefix . $getData["taskid"]);
    $mq->ack();
    return true;
}

//捕獲到了異常
catch (Exception $e) {
     //一定要把這次消息刪掉 不然會重復(fù)進(jìn)來 日志錯誤級別記高一點 手動處理問題
    $mq->ack();
    //記日志
    $this->log();
}

小伙伴們知道這段代碼哪里有問題嗎?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/30005.html

相關(guān)文章

  • 面試關(guān)于Redis的問題看這篇就夠了

    摘要:所以查閱官方文檔以及他人造好的輪子,總結(jié)了一些面試和學(xué)習(xí)中你必須掌握的問題。在微博應(yīng)用中,可以將一個用戶所有的關(guān)注人存在一個集合中,將其所有粉絲存在一個集合。 昨天寫了一篇自己搭建redis集群并在自己項目中使用的文章,今天早上看別人寫的面經(jīng)發(fā)現(xiàn)redis在面試中還是比較常問的(筆主主Java方向)。所以查閱官方文檔以及他人造好的輪子,總結(jié)了一些redis面試和學(xué)習(xí)中你必須掌握的問題。...

    yanbingyun1990 評論0 收藏0
  • 【面試精選】關(guān)于大型網(wǎng)站系統(tǒng)架構(gòu)你不得不懂的10個問題

    摘要:降級往往會指定不同的級別,面臨不同的異常等級執(zhí)行不同的處理。談?wù)勀銓偷恼J(rèn)識兩者關(guān)系具體可以看公眾號阿里巴巴中間件的這篇文章獨家解讀從微服務(wù)框架到微服務(wù)生態(tài)與并不是競爭關(guān)系,作為成熟的框架,其易用性擴展性和健壯性已得到業(yè)界的認(rèn)可。 該文已加入筆主的開源項目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目),地址:https://github.com/...

    leiyi 評論0 收藏0
  • 【面試精選】關(guān)于大型網(wǎng)站系統(tǒng)架構(gòu)你不得不懂的10個問題

    摘要:降級往往會指定不同的級別,面臨不同的異常等級執(zhí)行不同的處理。談?wù)勀銓偷恼J(rèn)識兩者關(guān)系具體可以看公眾號阿里巴巴中間件的這篇文章獨家解讀從微服務(wù)框架到微服務(wù)生態(tài)與并不是競爭關(guān)系,作為成熟的框架,其易用性擴展性和健壯性已得到業(yè)界的認(rèn)可。 該文已加入筆主的開源項目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目),地址:https://github.com/...

    luqiuwen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<