Vertx到mongoDB的连接

时间:2018-11-03 04:11:22

标签: mongodb vert.x

我正在开发一个Java / vertx项目,其后端是MongoDB(一段时间以来我曾经使用过Elixir / Erlang,对vertx来说我还很陌生,但我认为它是最合适的)。基本上,我有一个由HttpServerVerticles处理的http API,需要将数据存储到mongo db(或从mongo db检索数据),并将适当的回复发送给API调用者。我正在寻找正确的模式来实现查询和答复的处理。

从官方指南和一些教程中,我看到对于关系JDBC数据库,有必要定义一个专用的版本来异步处理查询。这是我第一次尝试使用mongo客户端,但是它引入了许多样板。

另一方面,从mongo客户端文档中,我读到它是完全无阻塞,并且它具有自己的连接池。这是否意味着我们可以安全(从vertx事件循环的角度),直接在http verticle中定义和使用mongo客户端?

有其他替代模式吗?

版本:vertx:3.5.4 / mongodb:4.0.3

2 个答案:

答案 0 :(得分:1)

是这样的:mongo连接池本质上与SQL-db池同步和阻塞一样,但是周围包裹着非阻塞的vert.x API。

因此,不是正常的

阻止方式
JsonObject obj = mongo.get( someQuery )

您开箱即用的是非阻塞呼叫:

mongo.findOne( 'collectionName', someQuery ){ AsyncResult<JsonObject> res ->
  JsonObject obj = res.result()
  doStuff( obj )
}

这意味着,您可以在事件循环中的任何类型的立面上直接安全使用它,而无需一遍又一遍地重新发明异步轮。

答案 1 :(得分:0)

在我们的客户中,我们使用 public void ExplicitWait(MobileElement element,int timeOutInSeconds) { (new WebDriverWait(driver, timeOutInSeconds)).until(ExpectedConditions .visibilityOf(element)); } 。 Vertx支持RX(mongodb-driver-rx),非常适合vertx-rx-java

有关更多信息,请参见: https://mongodb.github.io/mongo-java-driver-rx/ https://vertx.io/docs/vertx-rx/java/ https://github.com/vert-x3/vertx-examples/blob/master/rxjava-2-examples/src/main/java/io/vertx/example/reactivex/database/mongo/Client.java