码迷,mamicode.com
首页 > Web开发 > 详细

php的mq客户端获取队列方法改造

时间:2014-06-16 00:48:12      阅读:1752      评论:0      收藏:0      [点我收藏+]

标签: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提醒给相关负责人。

这里用到递归的概念。

php的mq客户端获取队列方法改造,布布扣,bubuko.com

php的mq客户端获取队列方法改造

标签:style   ext   color   set      cti   

原文地址:http://www.cnblogs.com/usual2013blog/p/3784125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!