当前位置: 首页 > 知识库问答 >
问题:

Vert中的群集和共享数据。x个

滕英奕
2023-03-14

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

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

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

提前感谢!

共有3个答案

葛和志
2023-03-14

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

"[...] 通过提供共享地图结构,可以更好地解决这种用例,该结构可以由同一垂直中的不同垂直实例直接访问。x实例。"

由于“vert.x instance”表示“jvm instance”,所以不能在不同的jvm之间使用sharedmap/set。您可以使用事件总线进行此操作。

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

解河
2023-03-14

带垂直。x 3-如果您配置了Vert。将实例转换为“集群模式”(只需将集群添加到Vert.x启动器的命令行即可,详情请参见此处),然后您可以使用共享数据接口访问“分布式映射”,该映射允许集群成员透明地在集群中读写数据。

例子:

if (vertx.isClustered()) {
    log.info("Using clustered data store");
    vertx.sharedData().<String, MyEntity>getClusterWideMap("entities", 
            res -> {
                AsyncMap<String, MyEntity> dataMap = res.result();
                setDataStore(dataMap);
            });
}
仲霍英
2023-03-14

有在不同机器上的vertx实例之间共享数据的选项

选项1。

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

ClusterManager clusterManager = ((VertxInternal)vertx).clusterManager();
Map map = clusterManager.getSyncMap("mapName"); // shared distributed map

该映射由Hazelcast IMap支持并分发。这假设您正在使用-集群参数运行vertx并已配置集群。

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

选项2。

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

Set<HazelcastInstance> instances = Hazelcast.getAllHazelcastInstances();
HazelcastInstance hz = instances.stream().findFirst().get();
Map map = hz.getMap("mapName"); // shared distributed map
 类似资料:
  • 场景:在使用nuxtjs 服务器渲染的时候接口数据都是asyncData进行请求的,之前用户在页面输入了一些数据等,前端这边都是缓存到localStorage 页面刷新的时候还可以拿到,现在的问题:页面刷新的时候客户端操作的数据如何实现服务器数据共享呢? 有什么好的思路吗?我想到过用cookie?但是太小了不能满足我的需求

  • 最近我正在开发一些针对storm拓扑的计时工具,但是对于storm集群中的数据共享,我还是有一些疑问: > 如果一个组件(spout/bolt)为每个工作者配置了多个执行器,假设工作者号为1,组件的parallelism_hint为3,任务号使用默认设置(即1),是否意味着该组件在工作者中有3个实例?如果不是,是否应该在同步块中使用组件的字段? 如果在组件中(或方法内)创建了一个名为“athrea

  • 问题内容: 我知道如何使用–volumes-from创建数据卷容器并将其安装到其他多个容器,但是我确实对它的用法和局限性有一些疑问: 情况:我正在寻找一个数据量容器来存储用户为我的Web应用程序上传的图像。该数据量容器将由运行Web前端的许多其他容器使用/安装。 问题: 数据量容器可以使用/安装在Docker群中其他主机上的容器中吗? 表现如何?建议以这种方式构造事物吗? 是否有更好的方法来处理跨

  • 我的应用程序本质上是一堆跨Node.js实例部署的微服务。一个服务可能会写入一些数据,而另一个服务将读取这些更新。(具体的例子是,我正在使用处理管道处理入站到解决方案中的数据。阶段1对相同的数据执行某些操作,阶段2对相同的数据执行其他操作,等等。这是一个相当常见的模式) 因此,我有一个很大的数据集(现在大约250GB,我读到过,一旦数据库变得比这个大得多,就不可能在数据库中引入分片,至少不是没有一

  • 假设我有这个中间件类: ctx。set()方法是虚构的,它在3.6.2版上不存在。那么,我们如何在请求的上下文中设置任意信息呢?

  • 我正在我的一个工人垂直站中进行阻塞服务呼叫,该垂直站记录了一个警告。这是通过增加时限来“解决”的,但是,我 表示什么?是主顶点的某种痕迹吗?谢谢。