Infinispan分布式模式clustered-cache-quickstart

时间:2015-05-03 20:38:31

标签: java infinispan distributed-caching

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

首先,据我所知,分布式模式允许定义数量的条目副本而不是复制模式,这复制了所有节点中的条目。例如,如果我们有3个条目(1,2,3)和3个缓存(A,B,C),其中numOwners(2)在分布式模式下生成的集群视图可能会导致: A含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键看到每个节点包含一组不同的条目。 尽管如此,我的输出显示所有条目基本上都是在复制模式下完成的。 任何想法为什么会这样发生?

1 个答案:

答案 0 :(得分:2)

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

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

因此,从:

更改Node.java @第133行
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());