Używamy Hazelcast 2.3.1, w naszym pliku konfiguracyjnym hazelcast.xml używamy napisać tyle na Hazelcast IMAP:Hazelcast mapa jest zablokowana
<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>
Mamy dwie klasy
HazelcastObjectOperation
który trzyma mapę i jest używany do umieszczania w niej obiektów.HazelcastObjectPersister
, który rozszerza MapStore jest używany do utrwalania obiektów, gdy Hazelcast dzwoni pod numerstoreAll()
.
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();
}
}
Problem jest, gdy Hazelcast biegnie tej mapie i pobiera obiektów, które powinny być przechowywane w sposób storeAll klasy persister , że mapa jest zablokowana przez kilka sekund, a więc umieścić na tej mapie trwa teraz . Czy istnieje rozwiązanie tego problemu?