web-dev-qa-db-fra.com

com.mongodb.MongoTimeoutException: expiration après 10000 ms en attendant de se connecter

J'ai supposé que cette question avait été posée plusieurs fois mais j'ai dû la reconsidérer. Parce que les solutions apportées à cette question ne m'ont pas donné de réponse exacte pour me débarrasser de cette sanglante erreur.

J'utilise mongo-Java-driver-2.12.4 et mongo.jar lorsque j'essaie d'insérer un document dans la base de données, j'obtiens l'erreur suivante. Toute aide est appréciée.

Erreur :

Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting to connect. Client view of cluster state is {type=Unknown, servers=[{address=127.0.0.1:27000, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {Java.net.ConnectException: Connection refused: connect}}, {address=127.0.0.1:27001, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {Java.net.ConnectException: Connection refused: connect}}, {address=127.0.0.1:27002, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {Java.net.ConnectException: Connection refused: connect}}]
    at com.mongodb.BaseCluster.getDescription(BaseCluster.Java:128)

Code:

    public class MongoDbConnectDatabase {

    public static void main(String[] args) {

        // To connect to mongodb server
        try {

             List<ServerAddress> lstServer = new ArrayList<ServerAddress>();
             lstServer.add(new ServerAddress("127.0.0.1", 27000));
             lstServer.add(new ServerAddress("127.0.0.1", 27002));
             lstServer.add(new ServerAddress("127.0.0.1", 27001));
             MongoClient  mongoClient = new MongoClient(lstServer);

            // Now connect to your database
            DB db = mongoClient.getDB("test");
            System.out.println("connect to database successfully");

            DBCollection coll = db.createCollection("mycol", null);
            System.out.println("Collection created successfully");

            DBCollection colReceived= db.getCollection("mycol");
            System.out.println("Collection mycol selected successfully");

            BasicDBObject doc = new BasicDBObject("title", "MongoDB").
                    append("description", "database").
                    append("likes", 100).
                    append("url", "http://www.tutorialspoint.com/mongodb/").
                    append("by", "tutorials point");

            colReceived.insert(doc);
                 System.out.println("Document inserted successfully");

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

    }

}
11
Tonyukuk

Vous obtenez une connexion refusée. Êtes-vous sûr que mongod fonctionne?

Essayez de vous connecter avec mongoclient:

mongo 127.0.0.1:27000/test

et cela pour les trois instances (27000, 27002, 27001).

Si vous avez également des problèmes avec mongoclient, vérifiez vos journaux.

7
chf

une autre raison de cette erreur peut être que la version du pilote mongo-Java n'est pas compatible avec votre application mongo. Mon cas: j'utilisais mongo-Java-driver version 2.12.3 avec mongo 3.0.8 -> ne fonctionne pas. ( https://docs.mongodb.com/ecosystem/drivers/driver-compatibility-reference/#reference-compatibility-mongodb-Java )

5
Jokeur

ici toutes les raisons possibles de cette erreur sont répertoriées. Dans mon cas, il était dû à une réplique non initialisée. Initialisez le jeu de réplicas à l'aide de rs.initiate(). Dans mon cas, j'ai utilisé le volume créé à partir des données de production et l'ai utilisé dans la mise en scène. Étant donné que la base de données local avait une ancienne configuration de réplicaset, elle n'a pas pu devenir PRIMARY. J'ai fait la chose suivante pour le rendre PRIMAIRE:

>use local
> db.dropDatabase();
{ "dropped" : "local", "ok" : 1 }
> rs.initiate()
>myrepl:PRMIARY

Maintenant, le client a pu se connecter et effectuer des opérations de lecture/écriture.

3
Ajeet Khan