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