我有一个 Apache Ignite Server 节点集群并定义了一些
IgniteCache
。集群中的第一个节点已使用一些值填充缓存。当新节点加入时,它会获取该缓存的一个实例,但是当我尝试迭代现有值时,iterator
没有下一个元素。如果我尝试通过 .get(String key)
访问特定条目,则会获取该条目。
这让我认为,即使复制模式是
REPLICATED
并且重新平衡模式是 SYNC
,值也不会立即提供给新节点。 SYNC
模式javadoc表示,在从其他网格节点加载所有必要的数据之前,缓存不会启动,但情况似乎并非如此。我已经尝试了一切,从监听 CACHE_STARTED
事件到尝试强制加载,但没有任何效果。
我只是想在IgniteCache
实例创建并填充网格数据之后运行一些逻辑。
EventType.EVT_CACHE_REBALANCE_STOPPED
添加一个侦听器并执行内部的任何逻辑,因为在缓存填充了各自的数据(在本例中是所有条目,因为我们有
REPLICATED
模式)后会触发此事件。ignite.events().enableLocal(EventType.EVT_CACHE_REBALANCE_STOPPED);
ignite.events().localListen(event -> {
if(event instanceof CacheRebalancingEvent && ((CacheRebalancingEvent) event).cacheName().equals("myCacheName")) {
for (Cache.Entry<String, Object> entry : myCache) {
logic(null, entry.getValue());
}
ignite.events().disableLocal(EventType.EVT_CACHE_REBALANCE_STOPPED);
return false;
}
return true;
}, EventType.EVT_CACHE_REBALANCE_STOPPED);
// ...
IgniteCache myCache = ignite.getOrCreateCache(cacheConfiguration("myCacheName"));