php的mq用戶端擷取隊列方法改造

來源:互聯網
上載者:User

標籤:style   ext   color   set   類   cti   

擷取mq中訊息然後處理失敗重試機制:

下面的代碼是php串連mq用戶端的擷取queue隊列中的訊息代碼:

    public function createDurableSubscriber($queue,$callback){
        
        $f = $this->con->subscribe($queue);
        
        while(1){
            $msg = $this->con->readFrame();
            if ($msg!=null) {
                echo "Received message with body ‘$msg->body‘\n";
                $result = call_user_func($callback,$msg);

                //底層方法介面改造
                //在調用介面的情境下,需要在調用介面成功之後,才告知已消費訊息(調用ack方法);
                //如果調用介面失敗之後,需要保留訊息並重試,直到調用介面成功,消費掉訊息

                //如果介面調用失敗,仍然要告知已消費訊息(調用ack方法),在其他地方進行重試判斷
                $this->con->ack($msg);                               
            }
        }
        unset($this->con);
    }

每次推送msg到queue時,需要額外推送一個標記retry_count。初始值為0。

從queue擷取msg處理失敗之後(調用介面失敗),需要重新推送msg到queue,並且額外標記retry_count加1,這時retry_count=1;

以此類推,每次retry_count都加1。重試10次,直到retry_count=10,如果處理失敗,就不重試,但是發送rtx提醒給相關負責人。

這裡用到遞迴的概念。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.