Java vertx-x3群集多个垂直线

Java vertx-x3群集多个垂直线,java,hazelcast,vert.x,event-bus,Java,Hazelcast,Vert.x,Event Bus,我想在集群模式下使用vert.x3,并使用hazelcast和java。我有两种类型的垂直柱: 用于处理http请求的verticle(简单http服务器)(这种类型的verticle应该在每个节点上运行) 带有(非本地)eventbus使用者的verticle,例如,包含一些数据(我有N部分数据,每个verticle包含一部分,我希望以HA模式运行每个部分,每个部分只运行一个实例(集群中有N个此类verticle)) 第一类垂直体将与第二类垂直体进行通信 我还有一个包含所有代码的fatjar

我想在集群模式下使用vert.x3,并使用hazelcast和java。我有两种类型的垂直柱:

  • 用于处理http请求的verticle(简单http服务器)(这种类型的verticle应该在每个节点上运行)
  • 带有(非本地)eventbus使用者的verticle,例如,包含一些数据(我有N部分数据,每个verticle包含一部分,我希望以HA模式运行每个部分,每个部分只运行一个实例(集群中有N个此类verticle))
  • 第一类垂直体将与第二类垂直体进行通信

    我还有一个包含所有代码的fatjar

    我对此没有什么问题

    我该怎么做?
    如何运行群集?
    我是在每个节点上运行相同的jar还是需要执行其他操作?
    如何运行每种类型的垂直体?
    如何保证只有一个类型为2的verticle实例在集群上运行?
    我是否丢失eventbus消息?

    使用vertx执行此任务是否正确

    这里有几个问题,我会尽力回答

    我该怎么做

    imho最简单的方法是为每个垂直条类型提供一个fat jar,并且每个垂直条都应该依赖于hazelcast群集管理器:

    <dependency>
      <groupId>io.vertx</groupId>
      <artifactId>vertx-hazelcast</artifactId>
      <version>3.3.2</version>
    </dependency>
    
    它们应该组成一个HZ集群并启动和运行。您可以在同一台机器上部署,也可以跨多台机器部署,只要您的网络支持多播,默认配置将适用于您。如果您有特殊需要,您需要自定义您的HZ配置

    如何保证集群上只运行一个类型为2的verticle实例

    你不能。这是一个分布式系统,网络应该被认为是不可靠的,因此不能假设您总是知道每种类型有多少节点在运行。要解决这个问题,您需要监控工具。顺便说一句,这不是特定于Vert.x的,而是与任何分布式系统/微服务体系结构相关

    我是否丢失eventbus消息

    只有在提交特定地址时没有消费者,这些消息才会丢失。这与前面的问题有关,为了减少这种可能性,您应该部署特定垂直的更多实例以减少消息丢失的机会,并且应该跨多台机器进行部署以减少网络拆分的更改

    使用vertx执行此任务是否正确


    如果您使用的是
    ha
    ,并且只有一个实例,那么这对于消费者垂直站点来说应该可以正常工作,但是请注意,web服务器如果由于某种原因死亡并在另一台主机上重新启动,将不会提供您所需的内容,因为http服务器已从host1“移动”到hostN。这意味着您的所有web客户端现在都会出现“无法连接到主机”错误,因为您的应用程序入口点现在使用的是不同的IP地址。

    这个问题太广泛了。看一看vert.x集群手册,并附带与特定问题相关的问题@tom.bujok,总而言之,我不明白vertx是如何部署垂直体的。如果我从不同的节点部署相同的垂直线,会发生什么?我应该一次部署所有垂直体(在执行所有节点之前)还是每个节点都应该部署所有垂直体(在这种情况下,vertx如何理解它是重复的?)?嘿@gavrmike我正在研究Vert.x来解决同样的问题。你找到2型垂直的解决方案了吗?
    java -jar verticle1.jar -cluster
    java -jar verticle2.jar -cluster