从外部运行的现有HazelCast群集启动Vert.x群集管理器

时间:2020-11-04 10:02:12

标签: docker hazelcast vert.x

我是使用Hazelcast / Vert.x技术的新手。

我在笔记本电脑上安装了docker桌面。使用docker,我使用TCP-IP创建了一个具有两个节点的Hazelcast群集,为此,我使用的是hazelcast / hazelcast:4.0.2映像。

<multicast enabled="false"></multicast>
<tcp-ip enabled="true">
  <member>x.x.x.x:5701</member>
  <member>x.x.x.x:5702</member>
</tcp-ip>

我检查了两个成员的docker服务日志,该日志显示两个成员均已成功创建并成功加入,没有任何错误。另外,使用IntelliJ IDE在我的笔记本电脑中创建了一个Hazelcast-client JAVA程序,通过它我成功连接到了在docker内部运行的Hazelcast集群。

当我尝试使用Vert.x Hazelcast并想连接在docker内部运行的现有Hazelcast集群时,我陷入了困境。根据文档,Vert.x Hazelcast不支持Hazelcast客户端或智能客户端。我想要的是实例化Vert.x Clustermanager,它将指向在docker外部运行的现有Hazelcast集群。我在JAVA代码中使用了Hazelcast.getHazelcastInstanceByName(“”)方法,该方法找不到现有的Hazelcust集群。实际上,我现有的项目中已有一个模块,该模块已在使用带有一个节点的嵌入式Vert.x Hazelcast群集。为了实现高可用性和零停机时间部署,我们希望为模块启用Hazelcast缓存。

是否可以在JAVA代码中获取现有的hazelcast实例。最近几周,我几乎浏览了所有Google链接,但无法使用TCP / IP找到现有的群集实例。但是,是的,使用hazelcast客户端,我可以连接到外部群集,但是我想实例化Vert.x Clustermanager,它要求使用Hazelcast实例而不是HazelcastClient实例。这是我专门为了最小化现有代码中的更改而设计的。

1 个答案:

答案 0 :(得分:0)

Vertx 不支持 Hazelcast 客户端(如您所提到的和 Vertx: Using an existing Hazelcast cluster 中所述)。这意味着您始终需要启动嵌入在 Vertx java 进程中的 Hazelcast 实例。

请注意,此嵌入式 Hazelcast 实例用于 Vertx 集群。如果您还想使用 Hazelcast 进行缓存,那么您可以设置自己的 Hazelcast 集群并使用 Hazelcast(智能)客户端连接到它。没问题。

现在,谈到 Vertx 聚类,根据您想要实现的目标,您有以下选择:

  1. 使用默认的嵌入式 Hazelcast
ClusterManager mgr = new HazelcastClusterManager();

Vertx 创建一个嵌入式 Hazelcast 实例并将其用于集群。

  1. 创建您自己的 Hazelcast 实例并将其传递给 HazelcastClusterManager
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
ClusterManager mgr = new HazelcastClusterManager(hazelcastInstance);

您仍然使用嵌入式 Hazelcast,但这次您可以访问 Hazelcast 实例。所以从技术上讲,你可以用它做任何你想做的事情(例如,获取一些分布式地图对象并将值放入其中)。

  1. 创建一个嵌入式 Hazelcast 并将其连接到您的其他 Hazelcast 集群

您可以创建一个单独的 Hazelcast 集群(就像您使用 Docker 所做的那样)。

$ docker run --rm --network host hazelcast/hazelcast
$ docker run --rm --network host hazelcast/hazelcast

这实际上可能不适用于 Docker Desktop,因为 Docker Desktop 在可能不支持多播发现的虚拟机中运行。因此,您可以install Hazelcast CLI以这种方式启动两个 Hazelcast 实例。

$ hz start
$ hz start

然后,确保在您的 Vertx 应用程序中使用相同的 Hazelcast 版本,并且在启动时,您应该看到它已连接到现有的 Hazelcast 集群。

Dec 30, 2020 4:30:11 PM io.vertx.core.impl.VertxImpl
WARNING: You're already on a Vert.x context, are you sure you want to create a new Vertx instance?
HTTP server started on port 8888
...
INFO: [192.168.48.112]:5703 [dev] [4.1] [192.168.48.112]:5703 is STARTING
Dec 30, 2020 4:30:20 PM com.hazelcast.internal.cluster.impl.MulticastJoiner
INFO: [192.168.48.112]:5703 [dev] [4.1] Trying to join to discovered node: [192.168.48.112]:5701
Dec 30, 2020 4:30:20 PM com.hazelcast.internal.server.tcp.TcpServerConnection
INFO: [192.168.48.112]:5703 [dev] [4.1] Initialized new cluster connection between /192.168.48.112:55121 and /192.168.48.112:5701
Dec 30, 2020 4:30:26 PM com.hazelcast.internal.server.tcp.TcpServerConnection
INFO: [192.168.48.112]:5703 [dev] [4.1] Initialized new cluster connection between /192.168.48.112:5703 and /192.168.48.112:37855
Dec 30, 2020 4:30:26 PM com.hazelcast.internal.cluster.ClusterService
INFO: [192.168.48.112]:5703 [dev] [4.1]

Members {size:3, ver:5} [
        Member [192.168.48.112]:5701 - db00aaa1-c46a-4dc1-a1a3-edd823edfaef
        Member [192.168.48.112]:5702 - 9bc4ba13-50d7-4c69-ba2d-2d5fd2e40884
        Member [192.168.48.112]:5703 - 3eb4dcf3-28de-46ef-8f08-49fe0cb1afd3 this
]
相关问题