Wir verwenden 2.3.1 Hazelcast, in unserer hazelcast.xml Konfigurationsdatei hinterlassen wir einen Hazelcast IMap schreiben verwenden:Hazelcast Karte ist gesperrt
<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>
Wir haben zwei Klassen
HazelcastObjectOperation
die die Karte enthält und verwendet, um Objekte darin zu platzieren.HazelcastObjectPersister
die erweitert wird MapStore wird verwendet , um Objekte zu erhalten, wenn Hazelcast ruftstoreAll()
.
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();
}
}
Das Problem ist, wenn Hazelcast durch diese Karte läuft und holt die Objekte, die in dem storeAll Verfahren der persister Klasse gespeichert werden soll, wird die Karte für Sekunden gesperrt und so ein put in diese Karte dauert diesmal . Gibt es eine Lösung für dieses Problem?