web-dev-qa-db-ja.com

com.mongodb.MongoTimeoutException:接続待機中に10000ミリ秒後にタイムアウト

私はこの質問が何度も尋ねられると思いましたが、もう一度尋ねる必要がありました。この質問のために提供された解決策は、この流血のエラーを取り除くための正確な答えを私に与えなかったからです。

私が使う mongo-Java-driver-2.12.4およびmongo.jar dbにドキュメントを挿入しようとすると、次のエラーが発生します。どんな助けでもありがたいです。

エラー:

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)

コード:

    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

接続が拒否されました。 mongodが実行されていますか?

Mongoclientと接続してみます。

mongo 127.0.0.1:27000/テスト

これは、3つのインスタンスすべて(27000、27002、27001)に当てはまります。

Mongoclientにも問題がある場合は、ログを確認してください。

7
chf

このエラーの別の理由として、mongo-Java-driverのバージョンがmongoアプリケーションと互換性がないことが考えられます。私の場合:mongo-Java-driverバージョン2.12.3をmongo 3.0.8で使用していた->動作しません。 ( https://docs.mongodb.com/ecosystem/drivers/driver-compatibility-reference/#reference-compatibility-mongodb-Java

5
Jokeur

ここは、このエラーの考えられるすべての理由がリストされています。私の場合、それは初期化されていないレプリカセットが原因でした。 rs.initiate()を使用してレプリカセットを初期化します。私の場合、本番データから作成されたボリュームを使用し、ステージングで使用しました。 local dbに古いレプリカセット構成があったため、PRIMARYにすることができませんでした。私はそれをプライマリにするために次のことをしました:

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

これで、クライアントは接続して読み取り/書き込み操作を実行できました。

3
Ajeet Khan