Hazelcast 2.3.1 を使用しており、hazelcast.xml 構成ファイルで、Hazelcast IMap に後書きを使用しています。
<map name="HazelcastObjectOperations.objectMap">
<backup-count>1</backup-count>
<map-store enabled="true">
<class-name>persister.HazelcastObjectPersister</class-name>
<write-delay-seconds>10</write-delay-seconds>
</map-store>
</map>
<properties>
<property name="hazelcast.map.cleanup.delay.seconds">5</property>
</properties>
私たちは2つのクラスを持っています
HazelcastObjectOperation
マップを保持し、オブジェクトをマップに配置するために使用されます。HazelcastObjectPersister
これは、Hazelcast が呼び出しているときにオブジェクトを永続化するために MapStore を拡張するために使用されstoreAll()
ます。
public class HazelcastObjectOperation {
protected final IMap<Long, MyHzcObj> objectMap;
private final HazelcastInstance instance;
public HazelcastObjectOperation() {
this.instance = Hazelcast.getDefaultInstance();
this.objectMap = this.instance.getMap("HazelcastObjectOperations.objectMap" );
}
public void save( final MyHzcObj object ) {
long start = System.currentTimeMillis();
IdGenerator generator = Hazelcast.getIdGenerator("generator");
this.objectMap.put( generator.newId(), object );
long end = System.currentTimeMillis();
}
}
問題は、Hazelcast がこのマップを実行し、永続化クラスの storeAll メソッドに格納する必要があるオブジェクトを取得するときに、マップが数秒間ロックされるため、今回はこのマップへの配置が続くことです。この問題の解決策はありますか?