【发布时间】:2013-02-13 07:36:48
【问题描述】:
我在Vert.x的手册中找到了下面这句话。
Worker verticles 也不允许使用 TCP 或 HTTP 客户端或 服务器。
JDBC也是一个TCP客户端吧?
那我不能在worker Verticle中使用JDBC阻塞调用?
【问题讨论】:
我在Vert.x的手册中找到了下面这句话。
Worker verticles 也不允许使用 TCP 或 HTTP 客户端或 服务器。
JDBC也是一个TCP客户端吧?
那我不能在worker Verticle中使用JDBC阻塞调用?
【问题讨论】:
不,您不能在 Verticle 中使用阻塞 JDBC 调用。有一个JDBC persistor module,它使用工作队列模块在多个处理器之间分担负载
Vert.x 2.0 将允许在模块中使用线程,因此问题应该会减少
【讨论】:
目前(Vert.x 3.x)您可以将 verticle 部署为 worker verticle 或使用
vertx.executeBlocking(...)
在这两种情况下,您的代码都将使用工作池中的线程运行,而不是在事件循环线程上运行,从而允许您调用阻塞代码。
【讨论】:
您可以在工作节点中使用 HTTP 或 TCP 调用,但这些调用必须是“异步”的。你不能阻塞线程。正如 Kamil(上)所说,您必须将 Verticle 部署为工作人员,如果您有同步调用,则应该使用 vertx.executeBlocking(...)。 这里有一些信息:https://developer.mastercard.com/blog/the-vertx-worker-model
【讨论】: