Infinispan 分布式模式 clustered-cache-quickstart

Infinispan Distributed mode clustered-cache-quickstart

大家好,我是 Infinispan 的新手,我对 infinispan/infinispan-quickstart · GitHub 中提供的分布式模式和快速入门有一些疑问,特别是 clustered-cache-quickstart。

首先,据我所知,分布式模式允许定义数量的条目副本,而不是复制模式,后者在所有节点内复制条目。例如,如果我们有 3 个条目(1、2、3)和 3 个缓存(A、B、C),其中 numOwners(2) 集群在分布式模式下的结果视图可能是: 一个含1,2 B含2,3 C含3,1 复制模式集群会导致: A、B 和 C 包含 1,2,3 如果我的假设有误,请指正。

此外,我 运行 infinispan-quickstart/clustered-cache · GitHub 本快速入门使用这些说明

要尝试使用分布式缓存,运行 在单独的终端中执行以下命令:

1 号航站楼

mvn compile exec:java -Djava.net.preferIPv4Stack=true -Dexec.mainClass="org.infinispan.quickstart.clusteredcache.Node" -Dexec.args="-d A"

2 号航站楼

mvn compile exec:java -Djava.net.preferIPv4Stack=true -Dexec.mainClass="org.infinispan.quickstart.clusteredcache.Node" -Dexec.args="-d B"

3 号航站楼

mvn compile exec:java -Djava.net.preferIPv4Stack=true -Dexec.mainClass="org.infinispan.quickstart.clusteredcache.Node" -Dexec.args="-d C"

我的所有节点都有相同的条目(我将条目数限制为 10):

节点A

    Cache contents on node A-29339
    key-0 = A-29339-0
    key-1 = A-29339-1
    key-2 = A-29339-2
    key-3 = A-29339-3
    key-4 = A-29339-4
    key-5 = A-29339-5
    key-6 = A-29339-6
    key-7 = A-29339-7
    key-8 = A-29339-8
    key-9 = A-29339-9

节点 B

    Cache contents on node B-36604
    key-0 = A-29339-0
    key-1 = A-29339-1
    key-2 = A-29339-2
    key-3 = A-29339-3
    key-4 = A-29339-4
    key-5 = A-29339-5
    key-6 = A-29339-6
    key-7 = A-29339-7
    key-8 = A-29339-8
    key-9 = A-29339-9

节点 C

    Cache contents on node C-26839
    key-0 = A-29339-0
    key-1 = A-29339-1
    key-2 = A-29339-2
    key-3 = A-29339-3
    key-4 = A-29339-4
    key-5 = A-29339-5
    key-6 = A-29339-6
    key-7 = A-29339-7
    key-8 = A-29339-8
    key-9 = A-29339-9

但是,在文档中 Getting Started with Infinispan 它说:您还可以通过按 Enter 键看到每个节点都包含一组不同的条目。 尽管如此,我的输出显示所有条目基本上都被复制,就像在复制模式下所做的那样。 知道为什么会这样吗?

Tristan Tarrant 在 JBoss 论坛上回答,复制粘贴回复:

那是因为当我们在 7.0 中更改 entrySet/keySet 的行为时,快速入门没有正确更新。以前这些方法只returned 本地节点上的数据,但现在它们return 来自所有节点的数据。要获得旧行为(即仅本地内容),您需要指定 CACHE_MODE_LOCAL 标志,以便不会向其他远程节点查询数据。

因此,将第 133 行的 Node.java 更改为:

ArrayList<Map.Entry<String, String>> entries = new ArrayList<>(cache.entrySet());  

ArrayList<Map.Entry<String, String>> entries = new ArrayList<>(cache.getAdvancedCache().withFlags(Flag.CACHE_MODE_LOCAL).entrySet());