vertx-x3聚类多个Verticle

时间:2016-07-20 22:03:55

标签: java hazelcast vert.x event-bus

我想在集群模式下使用vert.x3,使用带有hazelcast的java。我有两种类型的Verticle:

  1. verticle for handle http requests(simple http server)(这种类型的verticle应该在每个节点上运行)
  2. verticle with(非本地)eventbus消费者,用于包含一些数据(我有N个数据部分,每个Verticle包含一个部分,我想在HA模式下运行每个部分,每个部分只有一个实例(有群集中的这种类型的N个Vert))。
  3. 类型1的Verticle将与类型2的Verticle通信。

    我的所有代码都有一个胖子。

    我对此几乎没有疑问。

    我该怎么做?
    如何运行集群?
    我是否在每个节点上运行相同的jar或需要做其他事情? 如何运行每种类型的Verticle?
    如何保证只有一个类型2的Verticle实例将在集群上运行? 我是否丢失了eventbus消息? 这个任务使用vertx是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

这里有几个问题,我试着全部回答。

  

我该怎么做?

imho最简单的方法是每个Verticle类型都有一个胖子罐,每个Verticle都应该依赖于hazelcast集群管理器:

<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-hazelcast</artifactId>
  <version>3.3.2</version>
</dependency>

在你的树荫插件中指定清单属性:

  • Main-Classio.vertx.core.Launcher
  • Main-Verticlevertx.bc.service.Main
  

如何运行群集?

现在,您可以按以下方式运行每个胖罐:

java -jar verticle1.jar -cluster
java -jar verticle2.jar -cluster

他们应该组成一个HZ集群并启动并运行。只要您的网络支持多播,您就可以在同一台计算机上或多台计算机上进行部署,默认配置将适合您。如果您有特殊需求,则需要自定义HZ配置。

  

如何保证只有一个类型2的Verticle实例会在群集上运行?

你不能。它是一个分布式系统,网络应该被认为是不可靠的,所以不能总是知道每种类型的节点运行的数量。要解决此问题,您需要监控工具。顺便说一句,这不是Vert.x特定的,但与任何分布式系统/微服务架构有关。

  

我是否丢失了eventbus消息?

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

  

将vertx用于此任务是否正确?

如果您正在使用ha并且只有1个实例,这应该适用于消费者Verticle,但是请注意,如果由于某种原因,Web服务器在其他主机上死亡和重生将无法提供您的信息。 ;重新寻找自http服务器&#34;移动&#34;从host1到hostN。这意味着您的所有Web客户端现在都将获得&#34;无法连接到主机&#34;错误,因为您的应用程序入口点现在使用不同的IP地址。