我的程序需要打开大量连接(Mongo)。我收到错误:
819连接后打开的连接太多,无法再打开
。我已经知道我们可以增加这个限制。但这不是我的想法。我正在考虑关闭MongoClient对象,然后在800个连接后再次创建一个新对象。
我的想法是,使用新的mongoClient对象将关闭所有连接,当我再次启动/创建它时,连接将再次打开,直到800。 因此没有给出错误。 (如果这种方法完全错误/不会给出所需的结果,请告诉我。)
为此我需要知道ATM打开的连接数。有没有办法用java获取这些信息?
答案 0 :(得分:3)
您可以使用db.serverStatus()命令获取连接信息。它有一个连接子文档,其中包含总/可用连接信息。
了解更多信息:
答案 1 :(得分:1)
使用MongoDB Scala驱动程序检查MongoDB连接数:
- 创建MongoDB客户端:
import org.mongodb.scala._
import scala.collection.JavaConverters._
import scala.concurrent.Await
import scala.concurrent.duration._
import scala.util.{Failure, Success, Try}
// To directly connect to the default server localhost on port 27017
val mongodbClient: MongoClient = MongoClient()
// Use a Connection String
val mongodbClient: MongoClient = MongoClient("mongodb://localhost")
// or provide custom MongoClientSettings
val settings: MongoClientSettings = MongoClientSettings.builder()
.applyToClusterSettings(b => b.hosts(List(new ServerAddress("localhost")).asJava).
.build()
val mongodbClient: MongoClient = MongoClient(settings)
- 通过传递mongodbClient来调用getNoOfMongodbConnection:
val result = getNoOfMongodbConnection(mongodbClient)
- 获取连接数(当前,可用和总数)的方法
def getNoOfMongodbConnection(mongodbClient: MongoClient) = {
val adminDatabase = mongodbClient.getDatabase("admin")
val serverStatus = adminDatabase.runCommand(Document("serverStatus" -> 1)).toFuture()
Try {
Await.result(serverStatus, 10 seconds)
} match {
case Success(x) => {
val connection = x.get("connections")
logger.info("Number of mongodb connection:--> " + connection)
connection
}
case Failure(ex) => {
logger.error("Got error while getting the number of Mongodb connection:---> " + ex.printStackTrace())
None
}
}
}