集群vertx的多个或单个实例



我正在使用vertx4开发微服务,每个服务都由多个垂直服务组成,所有服务都使用下面的代码部署为集群(hazelcast(垂直服务。

Vertx.clusteredVertx(options.setHAEnabled(isHa), (vertx) -> {
((Vertx)vertx.result()).deployVerticle(verticleName, (new DeploymentOptions()));
});

我为服务中的每个vertile调用上面的代码,并创建了多个vertx对象或实例。

  1. 这是在集群中部署垂直产品的正确方式吗
  2. 我应该从clusteredVertx中获得一个vertx对象并使用它部署多个vertiles吗
  3. 拥有多个vertx实例的优点和缺点是什么

我已经阅读了vertx文档,但我不能特别理解集群。我甚至检查了一些vertx源代码,比如Launcher类,但没有任何帮助我得到答案。

我认为您混合了两个概念,一个是Vertx实例,另一个是集群。

每个Vertx实例都有并管理自己的事件总线和自己的事件循环,这些事件循环最适合用于运行许多verticals。Vertx的一个实例完全能够管理许多垂直领域,并允许它们通过一条事件总线相互通信。这就是并发模型。

当您需要在通常部署到不同JVM甚至机器的多个应用程序(=多个Vertx实例(之间扩展和连接事件总线时,需要集群。

集群时,每个Vertx实例都有自己的事件总线,但相互发现的实例(如何发现取决于集群技术(将桥接它们的事件总线——这意味着它们的垂直节点将相互发现。然而,这个桥有它自己的成本,并且不是您想要用于应用程序内部通信的东西。

因此,如果你谈论的是一个应用程序,那么通常的方法是获得一个Vertx实例,并将其用于部署所有垂直应用程序。vertile本身不知道它是否安装在集群的Vertx上。除了它可以显式地仅为本地使用(vertx.eventBus().localConsumer(...)(装载其处理程序之外,这意味着即使在集群设置中,这些处理程序也不会响应来自其他实例的消息。

在一个应用程序中拥有多个Vertx实例并非不可能,但如果您不试图将Vertx弯曲到其扩展,那么这不适合您。

最新更新