【问题标题】:Can I use JDBC blocking call in worker verticle of Vert.x?我可以在 Vert.x 的 worker verticle 中使用 JDBC 阻塞调用吗?
【发布时间】:2013-02-13 07:36:48
【问题描述】:

我在Vert.x的手册中找到了下面这句话。

Worker verticles 也不允许使用 TCP 或 HTTP 客户端或 服务器。

JDBC也是一个TCP客户端吧?

那我不能在worker Verticle中使用JDBC阻塞调用?

参考: http://vertx.io/manual.html#worker-verticles

【问题讨论】:

    标签: jdbc tcp vert.x


    【解决方案1】:

    不,您不能在 Verticle 中使用阻塞 JDBC 调用。有一个JDBC persistor module,它使用工作队列模块在多个处理器之间分担负载

    Vert.x 2.0 将允许在模块中使用线程,因此问题应该会减少

    【讨论】:

      【解决方案2】:

      目前(Vert.x 3.x)您可以将 verticle 部署为 worker verticle 或使用

      vertx.executeBlocking(...)
      

      在这两种情况下,您的代码都将使用工作池中的线程运行,而不是在事件循环线程上运行,从而允许您调用阻塞代码。

      https://vertx.io/docs/vertx-core/java/#blocking_code

      【讨论】:

        【解决方案3】:

        您可以在工作节点中使用 HTTP 或 TCP 调用,但这些调用必须是“异步”的。你不能阻塞线程。正如 Kamil(上)所说,您必须将 Verticle 部署为工作人员,如果您有同步调用,则应该使用 vertx.executeBlocking(...)。 这里有一些信息:https://developer.mastercard.com/blog/the-vertx-worker-model

        【讨论】:

          猜你喜欢
          • 2021-07-04
          • 2012-01-20
          • 1970-01-01
          • 1970-01-01
          • 2022-12-09
          • 2018-06-11
          • 2011-09-22
          • 2022-08-12
          • 2019-07-18
          相关资源
          最近更新 更多