Vert.x:如何将垂直线隔离到专用事件循环?

问题描述

在我的Java应用程序中,我正在使用 vertx-web 3.9.3 创建用于托管Web应用程序和一些其他api端点的Web服务器。 Web应用程序是关键任务,其余的api却很不错。

因此,我将web-app和rest api部署为两个顶点-每个顶点在不同端口上启动单独的http服务器,希望它们之间有明确的分隔,以便在休息时api出错,例如挂起事件循环线程,不会影响我的关键任务网络应用。

事实并非如此。在我看来,我无法控制将哪个事件循环分配给给定的Verticle。尽管分配事件循环时似乎有一种轮询策略,但是如果有足够的顶点,那么其中一些顶点最终将开始共享同一事件循环(以我无法确定地控制的方式)。

在vertx中是否可以将顶点保持在隔离的环境中?是否可以创建另一个Vertx实例,并且可以实现分离?

解决方法

您可以在同一过程中创建多个Vert.x实例。

在大多数情况下,为要部署的顶点数量创建足够的事件循环会更简单:

vertxOptions.setEventLoopPoolSize(size);

如果您绝对需要保证其余api部分不会对网络应用程序造成任何问题,那么我建议您将它们放在单独的进程中。 在同一JVM中运行时,共享事件循环是一个可能的干扰问题,但是还有其他一些问题,例如共享内存。