我想编写一个使用 GraphViz 呈现图形的 Verticle。我想通过将本机(共享)库加载到我的 JVM 中并通过 JNI 调用它来实现。现在,GraphViz 本身不是线程安全的。总是在自己的线程中运行每个多实例 verticle 是不够的,我还必须确保每个 verticle 都有自己的本地代码实例,或者换句话说,每个 verticle 在单独的进程中运行,每个利用其中一个核心。
大多数对 Vert.x 的描述都说只谈论线程之间的隔离(不共享数据等)。我没有发现任何关于进程隔离的信息。
基本上,我正在寻找一个框架来创建几个 REST 服务器实例,所有实例都在同一个套接字上侦听或在前面使用负载均衡器,而不必自己编写任何代码。类似于 PM2 对 Node.js 所做的事情。我可以用 Vert.x 做到这一点吗?
我意识到这可能与 Vert.x 的精神背道而驰,因为核心文档清楚地表明:
每个 Vertx 实例都维护多个事件循环,而不是单个事件循环。默认情况下,我们根据机器上可用内核的数量来选择数字,但这可以被覆盖。
这意味着与 Node.js 不同,单个 Vertx 进程可以跨服务器扩展。
但是由于我使用的是本机库,每个 JVM 只能加载一次,并且在我的情况下不能同时执行,因此防止扩展到多个内核,我想我真的想要 Node.js 模式,只在 Java 中。
我的要求也比集群事件总线文档中描述的要简单得多,例如Zookeeper 示例,因为我不需要实例之间的通信。