使用反应流Java驱动程序连接到Atlas MongoDB时出现错误“未发送SNI名称”

我正在尝试使用Java的反应流mongodb驱动程序连接到我的Atlas MongoDB数据库。当我尝试使用此代码执行此操作时,出现错误消息“未发送snI名称,请确保使用MongoDB 3.4+驱动程序/ shell”。我正在通过Atlas使用MongoDB 3.12.2 Java驱动程序,1.13.1反应性流,Java 11和4.2.3 MongoDB。

        MongoClient databaseclient = MongoClients.create("mongodb+srv://<database>:<password>@vestia-shyqn.gcp.mongodb.net/test?retryWrites=true&w=majority&ssl=true");
        MongoDatabase database = databaseclient.getDatabase("development");
        MongoCollection<Document> collection = database.getcollection("testing");
        Document doc = new Document("testing","123");
        collection.insertOne(doc).subscribe(new Subscriber<Success>() {
            @Override
            public void onSubscribe(Subscription s) {
                s.request(1);
            }

            @Override
            public void onNext(Success success) {
                System.out.println("Called: onNext");
            }

            @Override
            public void onError(Throwable t) {
                System.out.println("Called: onError");
                t.printStackTrace();
            }

            @Override
            public void onComplete() {
                System.out.println("Called: onComplete");
            }
        });

Stacktrace:

Mar 19,2020 4:42:20 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[127.0.0.1:27017],srvHost=vestia-shyqn.gcp.mongodb.net,mode=MULTIPLE,requiredClusterType=REPLICA_SET,serverSelectionTimeout='30000 ms',maxWaitQueueSize=500,requiredReplicaSetName='Vestia-shard-0'}
Mar 19,2020 4:42:20 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: No server chosen by com.mongodb.async.client.ClientSessionHelper$1@895e367 from cluster description ClusterDescription{type=UNKNOWN,connectionmode=MULTIPLE,serverDescriptions=[]}. Waiting for 30000 ms before timing out
Mar 19,2020 4:42:20 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Adding discovered server vestia-shard-00-02-shyqn.gcp.mongodb.net:27017 to client view of cluster
Mar 19,2020 4:42:20 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Adding discovered server vestia-shard-00-01-shyqn.gcp.mongodb.net:27017 to client view of cluster
Mar 19,2020 4:42:20 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Adding discovered server vestia-shard-00-00-shyqn.gcp.mongodb.net:27017 to client view of cluster
Mar 19,2020 4:42:21 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Opened connection [connectionId{localValue:2,serverValue:293661}] to vestia-shard-00-01-shyqn.gcp.mongodb.net:27017
Mar 19,2020 4:42:21 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Opened connection [connectionId{localValue:3,serverValue:300643}] to vestia-shard-00-00-shyqn.gcp.mongodb.net:27017
Mar 19,2020 4:42:21 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Monitor thread successfully connected to server with description ServerDescription{address=vestia-shard-00-01-shyqn.gcp.mongodb.net:27017,type=REPLICA_SET_PRIMARY,state=CONNECTED,ok=true,version=ServerVersion{versionList=[4,2,3]},minWireversion=0,maxWireversion=8,maxDocumentSize=16777216,logicalSessionTimeoutMinutes=30,roundTripTimeNanos=38130500,setName='Vestia-shard-0',canonicalAddress=vestia-shard-00-01-shyqn.gcp.mongodb.net:27017,hosts=[vestia-shard-00-00-shyqn.gcp.mongodb.net:27017,vestia-shard-00-02-shyqn.gcp.mongodb.net:27017,vestia-shard-00-01-shyqn.gcp.mongodb.net:27017],passives=[],arbiters=[],primary='vestia-shard-00-01-shyqn.gcp.mongodb.net:27017',tagSet=TagSet{[Tag{name='nodeType',value='ELECTABLE'},Tag{name='provider',value='GCP'},Tag{name='region',value='CENTRAL_US'}]},electionId=7fffffff0000000000000004,setVersion=1,lastWriteDate=Thu Mar 19 16:42:21 EDT 2020,lastUpdateTimeNanos=485738294061100}
Mar 19,2020 4:42:21 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Opened connection [connectionId{localValue:1,serverValue:282746}] to vestia-shard-00-02-shyqn.gcp.mongodb.net:27017
Mar 19,2020 4:42:21 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Setting max election id to 7fffffff0000000000000004 from replica set primary vestia-shard-00-01-shyqn.gcp.mongodb.net:27017
Mar 19,2020 4:42:21 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Setting max set version to 1 from replica set primary vestia-shard-00-01-shyqn.gcp.mongodb.net:27017
Mar 19,2020 4:42:21 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Discovered replica set primary vestia-shard-00-01-shyqn.gcp.mongodb.net:27017
Mar 19,2020 4:42:21 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Monitor thread successfully connected to server with description ServerDescription{address=vestia-shard-00-00-shyqn.gcp.mongodb.net:27017,type=REPLICA_SET_SECONDARY,roundTripTimeNanos=36108600,canonicalAddress=vestia-shard-00-00-shyqn.gcp.mongodb.net:27017,electionId=null,lastUpdateTimeNanos=485738318602400}
Mar 19,2020 4:42:21 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Monitor thread successfully connected to server with description ServerDescription{address=vestia-shard-00-02-shyqn.gcp.mongodb.net:27017,roundTripTimeNanos=37406400,canonicalAddress=vestia-shard-00-02-shyqn.gcp.mongodb.net:27017,lastUpdateTimeNanos=485738335063300}
Called: onError
com.mongodb.MongoCommandException: Command failed with error 8000 (AtlasError): 'no snI name sent,make sure using a MongoDB 3.4+ driver/shell.' on server vestia-shard-00-01-shyqn.gcp.mongodb.net:27017. The full response is {"ok": 0,"errmsg": "no snI name sent,make sure using a MongoDB 3.4+ driver/shell.","code": 8000,"codeName": "AtlasError"}
    at com.mongodb.internal.connection.ProtocolHelper.getcommandFailureException(ProtocolHelper.java:175)
    at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:390)
    at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:376)
    at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:677)
    at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:644)
    at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:514)
    at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:511)
    at com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.completed(AsynchronousChannelStream.java:220)
    at com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.completed(AsynchronousChannelStream.java:203)
    at com.mongodb.internal.connection.tlschannel.async.AsynchronousTlsChannel$3$1.run(AsynchronousTlsChannel.java:151)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.Futuretask.run(Futuretask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
Mar 19,2020 4:42:22 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Closed connection [connectionId{localValue:4}] to vestia-shard-00-01-shyqn.gcp.mongodb.net:27017 because there was a socket exception raised by this connection.

似乎我想出了如何通过在连接字符串的末尾添加“&ssl = true”来连接数据库的方法,但是在尝试编写时仍然会收到错误消息。

pom.xml:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-reactivestreams</artifactId>
            <version>1.13.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <version>3.7.0</version>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
flb1492 回答:使用反应流Java驱动程序连接到Atlas MongoDB时出现错误“未发送SNI名称”

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2615967.html

大家都在问