PHP 重连示例

最后更新时间:2021-06-10 15:51:02

    说明

    云数据库 MongoDB 提供的不是简单的 mongod 访问,给到用户访问的是一个负载均衡 IP,此 IP 后面是连接到一系列类似 mongos 一样存在的路由接入层。
    客户端驱动会透过负载均衡 IP 与接入机建立一个长连接,当此连接处于长期间活跃状态时,我们不会对其做任何干预,但是当长连接闲置时间超过1天时(此时间会随着版本优化而调整),路由接入层会剔除该连接。
    一般来说,客户端驱动会实现一个自动重连的过程,但是也有部分语言的驱动并没有实现。对于没有实现自动重连的语言驱动,当用户使用一个已经被剔除的连接来尝试与云数据库 MongoDB 通信时可能会得到 “Remote server has closed the connection” 之类的错误信息,所以需手动进行重连,本文给出一个 PHP 重连的 demo。

    基于 php mongo 驱动的重连实现

    
    <?php
    function getConnection() {
       $connection = false;
       $uri = 'mongodb://rwuser:1234567a@10.66.148.142:27017/admin?authMechanism=MONGODB-CR';
       $maxRetries = 5;
       for( $counts = 1; $counts <= $maxRetries; $counts++ ) {
           try {
               $connection = new MongoClient($uri);
           } catch( Exception $e ) {
        // 或者 根据需要使用下面的catch代码行,注意那一个“\”,某些框架使用命名空间时需要用到。
        // } catch( \Exception $e ) {
               continue;
           }
           break;
       }
       return $connection;
    }
    $connection = getConnection();
    if($connection) {
        $db = $connection->testdb;
        $collection = $db->testcollection;
            $one = $collection->findOne();
            var_dump($one);
    }