Използваме 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>
Имаме два класа
HazelcastObjectOperation
, който съдържа картата и се използва за поставяне на обекти в нея.HazelcastObjectPersister
, което разширява MapStore, се използва за запазване на обекти, когато Hazelcast извиква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 на класа persister, картата се заключва за секунди и така поставянето в тази карта продължава това време. Има ли някакво решение за този проблем?