4

現在、デフォルトのオプション .getMap() を使用してマップを作成しています。getConfig().addMapConfig オプションは使用しません。これは、マップが空かどうかなどのチェックを避け、マップへのアクセスが必要になるたびにこのコードを呼び出さないようにするためです (インターフェイス getMap() によって抽象化されたクライアント コード)。

問題は、特定のマップを破棄したい場合、すべてのマップ名を反復処理し、特定の基準に一致するマップのみを破棄することです。MapConfig に追加しないため、getConfig().getMapConfigs().keyset() を使用してマップ名を取得することはできません。

ここで、.getDistributedObjects() を使用して反復しようとしています。唯一の懸念は、分散オブジェクト全体がメモリにロードされるか (そうでないことを願っています..)、または DistributedObject 参照にロードされる ID と名前だけ (プロキシなど) です。コードからはわかりませんでした。この方法で行うのは良い考えですか、それともマップ オブジェクトの参照を取得するためのより良い方法はありますか。助けてください

4

2 に答える 2

5

HazelcastInstance::getDistributedObjects は、ローカルで認識されているすべてのプロキシ オブジェクトを呼び出すだけですが、これらはすべてクラスターで認識されているオブジェクトです。クライアントでは、これらの情報は、クラスター自体内のサーバー ノードを使用して要求されます。したがって、これらのプロキシ オブジェクトを繰り返し処理して、それらの型をテストしても安全です。

于 2016-01-14T06:47:47.643 に答える
3

noctariusが述べたように (そして私の理解が正しければ)、 を繰り返し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();
    }

}
于 2019-05-15T18:05:42.883 に答える