【问题标题】:Multiple or single instance for clustered vertx集群顶点的多个或单个实例
【发布时间】:2021-07-14 20:24:10
【问题描述】:

我正在使用 vertx4 开发微服务,每个服务由多个 verticles 组成,并且使用以下代码将所有服务都部署为 clustered(hazelcast) verticles。

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

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

  1. 在集群中部署 Verticle 的方法是否正确?
  2. 我是否应该从 clusteredVertx 获取一个 vertx 对象并使用它部署多个 Verticle?
  3. 拥有多个 vertx 实例的优点和缺点是什么?

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

【问题讨论】:

    标签: vert.x vertx-verticle vertx-eventbus vertx4


    【解决方案1】:

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

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

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

    集群时,每个 Vertx 实例都有自己的事件总线,但发现彼此的实例(如何取决于集群技术)将桥接它们的事件总线,这意味着它们的 Verticle 会找到彼此。但是,此桥有其自身的成本,您不希望将其用于内部应用程序通信。

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

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

    【讨论】:

    • 嗨@mohamnag,我正在使用集群顶点在一项服务内以及跨单个服务进行通信。我的问题是针对一个应用程序中的多个顶点,我应该只调用一次 clusteredVertx() 并使用它部署多个顶点,还是可以为每个顶点调用 clusteredVertx()?
    • 可能是我不够清楚,但除非您非常了解 Vertx 并且您正在扩展它,否则您的所有 Verticle 只需要一个实例,无论是否聚集。跨度>
    猜你喜欢
    • 2015-11-26
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多