在Vertx中使用MongoDB Atlas

时间:2017-12-12 09:01:51

标签: mongodb vert.x mongodb-atlas

是否有人尝试将MongoDB Atlas数据库用作Vertx服务(https://www.mongodb.com)?

我已尝试连接,但我一直收到以下错误:

INFO: Exception in monitor thread while connecting to server socie-shard-00-01-zeymc.mongodb.net:27017
com.mongodb.MongoSocketReadException: Prematurely reached end of stream
    at com.mongodb.connection.AsynchronousSocketChannelStream$BasicCompletionHandler.completed(AsynchronousSocketChannelStream.java:215)
    at com.mongodb.connection.AsynchronousSocketChannelStream$BasicCompletionHandler.completed(AsynchronousSocketChannelStream.java:201)
    at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126)
    at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:281)
    at sun.nio.ch.WindowsAsynchronousSocketChannelImpl$ReadTask.completed(WindowsAsynchronousSocketChannelImpl.java:579)
    at sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:397)
    at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我使用了以下内容:

<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-mongo-client</artifactId>
    <version>3.5.0</version>
</dependency>

比我尝试使用他们的Java Mongo驱动程序:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.6.0</version>
</dependency>

这很有效。只有这会对我的所有查询进行大量重写。而且我不确定这是否是与Vertx结合使用的好驱动因素。

有没有人知道如何修复上述错误,或者有人知道使用org.mongodb java驱动程序是否安全。

非常感谢提前!

我的解决方案

感谢Daniel,我设法让它与vertx-mongo-client合作!

我添加到我的Json配置

config.put("ssl", true);

我在创建MongoClient之前添加了以下行。

System.setProperty("org.mongodb.async.type", "netty");

1 个答案:

答案 0 :(得分:0)

前一段时间遇到过类似的问题,但是让它与官方的vertx mongo客户端合作。我只需要确保提供所有连接信息。 例如:

{
hosts: [
    {
        host: "xpto-shard-00-00-aaa.mongodb.net",
        port: 27017
    },
    {
        host: "xpto-shard-00-01-aaa.mongodb.net",
        port: 27017
    },
    {
        host: "xpto-shard-00-02-aaa.mongodb.net",
        port: 27017
    }
],
replicaSet: "xpto-shard-0",
db_name: "db_name",
username: "username",
password: "password",
ssl: true,
authSource: "admin",
maxPoolSize: 30,
minPoolSize: 5,
waitQueueMultiple : 100

}

另外,我必须确保设置系统属性:

var System = Java.type("java.lang.System");
System.setProperty("org.mongodb.async.type", "netty");

(这个Verticle在Javascript中,但它在Java中几乎相同)