gpt4 book ai didi

java - vertx-x3 集群多个顶点

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:22 25 4
gpt4 key购买 nike

我想在集群模式下将 vert.x3 与带有 java 的 hazelcast 一起使用。我有两种 Verticle:

  1. 用于处理http请求的verticle(简单的http服务器)(这种类型的verticle应该在每个节点上运行)
  2. verticle with (non-local) eventbus consumers, for contain some data (i have N parts of data, each verticle contain one part, i would like run each part in HA mode and only a instance for each (有集群中有 N 个这种类型的 Verticle))。

类型一的 Verticle 将与类型二的 Verticle 通信。

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

我对此没有什么疑问。

我应该怎么做?
如何运行集群?
我是在每个节点上运行相同的 jar 还是需要做其他事情?
每种Verticle如何运行?
如何保证集群上只运行一个类型二的Verticle实例?
我会丢失事件总线消息吗?
使用 vertx 来完成这个任务是正确的方法吗?

最佳答案

这里有几个问题,我会尽量一一回答。

How should I do this?

恕我直言,最简单的方法是每个 Verticle 类型有一个 fat jar,并且每个 Verticle 都应该依赖于 hazelcast 集群管理器:

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

并在您的阴影插件中指定 list 属性:

  • 主类:io.vertx.core.Launcher
  • Main-Verticle:vertx.bc.service.Main

How to run cluster?

现在对于每个 fat jar,你可以运行为:

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

它们应该形成一个 HZ 集群并启动并运行。您可以在同一台机器上部署,也可以在多台机器上部署,只要您的网络支持多播,默认配置就可以为您工作。如果您有特殊需求,您需要自定义 HZ 配置。

How to guarantee that only one instance of verticle of type two will run on cluster?

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

Does I lose eventbus messages?

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

Is it correct way to use vertx for this task?

如果您正在使用 ha 并且只有 1 个实例,这对于消费者 Verticles 应该可以正常工作,但是请注意,如果网络服务器由于某种原因死亡并在另一台主机上重生,将不会提供您的内容自从 http 服务器从 host1“移动”到 hostN 以来,我们正在寻找。这意味着您的所有 Web 客户端现在都会收到“无法连接到主机”错误,因为您的应用程序入口点现在使用的是不同的 IP 地址。

关于java - vertx-x3 集群多个顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38491621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com