Мы используем 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, карта блокируется на несколько секунд, и поэтому на этот раз помещается в эту карту. Есть ли решение этой проблемы?