我的Ignite拓扑是启用本地持久性的2台服务器A和B,以及禁用持久性的2台服务器C和D。有一个REPLICATED缓存,它在Java中的服务器C和D上声明(也在XML中以声明方式尝试过),并传播到A和B。对等类加载已打开。
测试用例很小。缓存在C上填充
cache.put(key, value)
键是java.lang.String
对象,值是我的POJO,没有任何字段注释(与SQL或相似性有关)。
然后,在服务器D上使用以下命令查询条目
cache.containsKey(key)
或
Iterator<Entry<String, MyPOJO>> it = cache.iterator();
while (it.hasNext()) {
...
}
或
cache.query(new ScanQuery<String, MyPOJO>(null)).getAll().forEach(...);
所有这些方法都不返回已插入服务器C的值。令人惊讶的是,
cache.get(key)
返回值。如果我使用Ignite Visor(作为客户端节点)连接到群集,它将显示存储在服务器A和B上的实体。
仅当替换了缓存模式时才会发生。如果更改为PARTITIONED,则以上所有缓存方法均能正常工作并返回插入的值。
更新
我手头没有配置XML,所以让我对其进行描述。
节点A和B:
节点C和D:
我将尽快提供确切的XML配置。