我想在集群模式下使用vert.x3,使用带有hazelcast的java。我有两种类型的Verticle:
类型1的Verticle将与类型2的Verticle通信。
我的所有代码都有一个胖子。
我对此几乎没有疑问。
我该怎么做?
如何运行集群?
我是否在每个节点上运行相同的jar或需要做其他事情?
如何运行每种类型的Verticle?
如何保证只有一个类型2的Verticle实例将在集群上运行?
我是否丢失了eventbus消息?
这个任务使用vertx是正确的方法吗?
答案 0 :(得分:2)
这里有几个问题,我试着全部回答。
我该怎么做?
imho最简单的方法是每个Verticle类型都有一个胖子罐,每个Verticle都应该依赖于hazelcast集群管理器:
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-hazelcast</artifactId>
<version>3.3.2</version>
</dependency>
在你的树荫插件中指定清单属性:
Main-Class
:io.vertx.core.Launcher
Main-Verticle
:vertx.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地址。