zoukankan      html  css  js  c++  java
  • php的mq客户端获取队列方法改造

    获取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' ";
                    $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提醒给相关负责人。

    这里用到递归的概念。

  • 相关阅读:
    java上传视频文件
    java+HTML5实现断点续传
    web+上传大文件断点续传
    javaweb项目断点续传
    CKEditor从word粘贴问题
    netback的tasklet调度问题及网卡丢包的简单分析
    linux下开启ftp的21号port
    Dubbo--简单介绍
    OpenCV2马拉松第15圈——边缘检測(Laplace算子,LOG算子)
    【打CF,学算法——一星级】Codeforces Round #313 (Div. 2) A. Currency System in Geraldion
  • 原文地址:https://www.cnblogs.com/usual2013blog/p/3784125.html
Copyright © 2011-2022 走看看