首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vert.x中的集群和共享数据

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

Stack Overflow用户
提问于 2012-09-06 19:32:06
回答 5查看 11.2K关注 0票数 17

我使用Vert.x进行开发(基于Netty和Hazelcast),并且尝试在两个服务器实例之间共享数据(这些实例分别位于不同的机器上,在同一个lan上)。

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

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

提前感谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-01-08 22:34:48

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

选项1.

你可以使用Vert.x ClusterManager和它的地图:

代码语言:javascript
复制
ClusterManager clusterManager = ((VertxInternal)vertx).clusterManager();
Map map = clusterManager.getSyncMap("mapName"); // shared distributed map

该地图由Hazelcast IMap支持,并被分发。这里假设您正在运行带有-cluster参数的vertx,并且已经配置了集群。

但是请注意,这是内部API,一般不推荐用于生产。如果你正在做一个一次性的实验,那么它可能会很有用。

选项2.

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

代码语言:javascript
复制
Set<HazelcastInstance> instances = Hazelcast.getAllHazelcastInstances();
HazelcastInstance hz = instances.stream().findFirst().get();
Map map = hz.getMap("mapName"); // shared distributed map
票数 11
EN

Stack Overflow用户

发布于 2017-02-05 22:26:09

使用Vert.x3-如果您将Vert.x实例配置为“集群模式”(可以像将-cluster添加到Vert.x启动器的命令行see here for details一样简单),那么您可以使用SharedData接口访问“分布式映射”,这允许集群成员透明地跨集群读写数据。

示例:

代码语言:javascript
复制
if (vertx.isClustered()) {
    log.info("Using clustered data store");
    vertx.sharedData().<String, MyEntity>getClusterWideMap("entities", 
            res -> {
                AsyncMap<String, MyEntity> dataMap = res.result();
                setDataStore(dataMap);
            });
}
票数 8
EN

Stack Overflow用户

发布于 2012-10-23 03:40:11

Afaik您不能在vert.x的不同实例之间共享数据--来自文档

"...通过提供可由同一vert.x实例中的不同verticle实例直接访问的共享地图结构,可以更好地解决这样的用例。“

因为"vert.x instance“意味着"jvm instance”,所以不能在不同的jvm之间使用sharedmap/set。您可以使用事件总线来实现这一点。

在其他人投反对票之前编辑:我的答案是2012年,6年前,当时这是不可能的。现在,正如其他人已经说过的那样,这是可能的

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12299132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档