2014-07-23 138 views
0

这个问题已经被问了一个巨大的时间,但我的问题是非常具体的,我没有看到它被问到在论坛上。Mongo连接验证

我们可以使用db.getCollectionNames()来验证连接吗?它确实会抛出MongoException?

谢谢。

编辑: 对不起。这是一个超级通用的问题。让我改述一下: 我正在使用Java驱动程序,我目前使用复制环境。将来我可能会有一个共享的环境。 我想要测试mongo连接。 getDBNames()或getCollectionNames()是否足够? 我也使用ensureOpen()来测试一般健康状况。

 List<ServerAddress> addrs = mongoClient.getAllAddress(); 

     if (CollectionUtils.isEmpty(addrs)) { 
      String message = "Unable to connect to mongo: " + this.toString(); 
      LOGGER.error(message); 
      throw new MongoDbException(this.toString(), Error.MONGO_ERROR.setMessage(this.toString())); 
     } 

     for (ServerAddress addr : addrs) { 
      mongoClient.getConnector().getDBPortPool(addr).get().ensureOpen(); 
     } 
+0

我看不到getCollectionNames()的调用 - –

+0

任何向服务器发送查询/命令的方法都会在网络不可用时抛出连接异常。你通过这样做想达到什么目的?一项测试显示,在您检查时连接可能可用,但并不意味着当您最终需要使用该连接时它仍然有效(因此您仍然需要处理任何异常)。如果您想确保MongoDB服务器部署中的所有节点都正在运行,更好的方法是使用服务器监控解决方案,例如免费的MongoDB管理服务(MMS)监控(mms.mongodb.com)。 – Stennie

回答

0

所以我看不出有任何特定语言或驱动程序特定的方面你的问题,所以我开始与db.getCollectionNames(),这是一个shell帮手http://docs.mongodb.org/manual/reference/method/db.getCollectionNames/

它失败,如果连接断开,这里有一个例子发生故障,您可以通过通过蒙戈外壳连接,然后查杀数据库测试:

2014-07-23T15:35:03.897-0700 DBClientCursor::init call() failed 
2014-07-23T15:35:03.898-0700 Error: error doing query: failed at src/mongo/shell/query.js:81 
2014-07-23T15:35:03.899-0700 trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed 
2014-07-23T15:35:03.899-0700 warning: Failed to connect to 127.0.0.1:27017, reason: errno:61 Connection refused 
2014-07-23T15:35:03.899-0700 reconnect 127.0.0.1:27017 (127.0.0.1) failed failed couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed 

如果你问是否会有抛出一个异常在您的代码中,这是与驱动程序相关的,因此您需要使用有关您所使用的语言和所使用的驱动程序的信息。尽管如此,它很可能会抛出一个异常(或您的语言等价物),因为它使用开放连接向MongoDB发送命令,并且如果它无法发送和接收响应,将会失败。

一般来说,这种类型的问题很容易确定。写一些连接的测试代码,等待30秒,然后发出你的命令。启动MongoDB,运行你的脚本,并在30秒完成之前杀死数据库。你会得到你的答案 -

+0

对不起。这是一个超级通用的问题。让我改述一下: – sharath