Vert.x: 如何将 Verticle 隔离到专用事件循环?
Vert.x: how to isolate a verticle to dedicated event loop?
在我的 java 应用程序中,我正在使用 vertx-web 3.9.3 创建一个网络服务器来托管一个网络应用程序和一些其他 api 端点。 Web 应用程序是关键任务,其余的 api,但是,拥有它真是太好了。
我部署了 web-app 和 rest api 因此作为两个 Verticle - 每个在不同的端口上启动一个单独的 http 服务器,希望它们之间有明确的分离 这样如果 rest api 出错了,例如挂起事件循环线程,它不会影响我的关键任务网络应用程序。
事实并非如此。在我看来,我无法 控制 将哪个事件循环分配给给定的 Verticle。虽然在分配事件循环时似乎有循环策略,但如果有足够多的 Verticle,它们中的一些最终会开始共享相同的事件循环(在某种程度上我无法确定地控制)。
在vertx中是否可以将一个verticle保持在一个孤立的环境中?可以再创建一个Vertx实例吗,会不会实现分离?
您可以在同一进程中创建多个 Vert.x 实例。
在大多数情况下,尽管为要部署的 Verticles 数量创建足够的事件循环更简单:
vertxOptions.setEventLoopPoolSize(size);
如果您绝对需要保证其余 api 部分不会对 web-app 部分造成任何问题,那么我建议将它们放在单独的进程中。
当 运行 在同一个 JVM 中时,共享事件循环是一个可能的干扰问题,但还有其他问题,比如共享内存。
在我的 java 应用程序中,我正在使用 vertx-web 3.9.3 创建一个网络服务器来托管一个网络应用程序和一些其他 api 端点。 Web 应用程序是关键任务,其余的 api,但是,拥有它真是太好了。
我部署了 web-app 和 rest api 因此作为两个 Verticle - 每个在不同的端口上启动一个单独的 http 服务器,希望它们之间有明确的分离 这样如果 rest api 出错了,例如挂起事件循环线程,它不会影响我的关键任务网络应用程序。
事实并非如此。在我看来,我无法 控制 将哪个事件循环分配给给定的 Verticle。虽然在分配事件循环时似乎有循环策略,但如果有足够多的 Verticle,它们中的一些最终会开始共享相同的事件循环(在某种程度上我无法确定地控制)。
在vertx中是否可以将一个verticle保持在一个孤立的环境中?可以再创建一个Vertx实例吗,会不会实现分离?
您可以在同一进程中创建多个 Vert.x 实例。
在大多数情况下,尽管为要部署的 Verticles 数量创建足够的事件循环更简单:
vertxOptions.setEventLoopPoolSize(size);
如果您绝对需要保证其余 api 部分不会对 web-app 部分造成任何问题,那么我建议将它们放在单独的进程中。 当 运行 在同一个 JVM 中时,共享事件循环是一个可能的干扰问题,但还有其他问题,比如共享内存。