Vert.x中的群集和共享数据

cas*_*rco 15 hazelcast vert.x

我正在开发Vert.x(基于Netty和Hazelcast),我正在尝试在两个服务器实例之间共享数据(在同一局域网中不同机器中的那些实例的eache).

我的问题是我不知道如何配置vert.x服务器以允许它们共享它们的并发内存映射(理论上说这是可能的).

我已经阅读了Vert.x和Hazelcast的许多文档,但我还没有结果.(我不知道如何强制vert.x加载hazelcast xml配置文件).

提前致谢!

And*_*ejs 8

可以选择在不同计算机上的vertx实例之间共享数据

选项1.

您可以使用Vert.x ClusterManager及其地图:

ClusterManager clusterManager = ((VertxInternal)vertx).clusterManager();
Map map = clusterManager.getSyncMap("mapName"); // shared distributed map
Run Code Online (Sandbox Code Playgroud)

该地图由Hazelcast IMap支持并分发.这假设您使用-cluster参数运行vertx 并配置了群集.

但请注意,这是内部API,通常不建议用于生产.如果您正在进行一次性实验,那么它可能很有用.

选项2.

一旦vertx以集群模式启动,您就可以访问Hazelcast:

    Set<HazelcastInstance> instances = Hazelcast.getAllHazelcastInstances();
    HazelcastInstance hz = instances.stream().findFirst().get();
    Map map = hz.getMap("mapName"); // shared distributed map
Run Code Online (Sandbox Code Playgroud)


Gus*_*uss 5

使用Vert.x 3 - 如果将Vert.x实例配置为"群集模式"(可以像添加-cluster到Vert.x启动器的命令行一样简单,请参阅此处了解详细信息),然后您可以使用SharedData界面访问"分布式映射",允许集群成员透明地读取和写入集群中的数据.

例:

if (vertx.isClustered()) {
    log.info("Using clustered data store");
    vertx.sharedData().<String, MyEntity>getClusterWideMap("entities", 
            res -> {
                AsyncMap<String, MyEntity> dataMap = res.result();
                setDataStore(dataMap);
            });
}
Run Code Online (Sandbox Code Playgroud)