现在我们使用默认选项.getMap()创建地图。我们不使用getConfig()。addMapConfig选项,因为我们希望避免检查映射是否为空等,以避免每当我们需要访问映射时调用此代码(由getMap()接口抽象的客户端代码)。
现在的问题是,如果我们想要销毁我们想要遍历所有地图名称的某些地图并且仅销毁符合特定标准的地图,那么问题就在某个时候。由于我们不添加MapConfig,因此我们无法使用getConfig()。getMapConfigs()。keyset()来获取地图名称。
现在我们尝试使用.getDistributedObjects()来迭代。唯一担心的是分布式对象作为一个整体加载到内存中(我希望不是..)或只是加载到DistributedObject引用中的ID和名称(如代理)。我无法从代码中得出结论。这样做是个好主意,还是有更好的方法来获取地图对象引用。请帮忙
答案 0 :(得分:4)
HazelcastInstance :: getDistributedObjects只是回忆所有本地已知的代理对象,但这些都是群集已知的对象。在客户端上,使用群集内部的服务器节点请求这些信息。因此,迭代这些代理对象并测试它们的类型是安全的。
答案 1 :(得分:0)
作为夜色stated(如果我理解正确),应该安全地遍历getDistributedObjects()
的返回,然后获取我们要处理的相关数据。也许像这样的事情会做得到:
import com.hazelcast.client.HazelcastClient;
import com.hazelcast.core.DistributedObject;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
import java.util.Collection;
public class HazelcastMapsTest {
public static void main(String[] args) {
HazelcastInstance hazelcastInstance = HazelcastClient.newHazelcastClient();
Collection<DistributedObject> distributedObjects = hazelcastInstance.getDistributedObjects();
for (DistributedObject object : distributedObjects) {
if (object instanceof IMap) {
IMap map = hazelcastInstance.getMap(object.getName());
System.out.println("Mapname=" + map.getName());
map.entrySet().forEach(System.out::println);
}
}
hazelcastInstance.shutdown();
}
}