在多线程环境中,使用入口处理器来更新对象的值,并使用Mapstore的后写策略来持久化。将setWriteCoalescing设置为FALSE,因为我希望将所有更新存储在key上。但它只将最后一次更新应用于persistent DB。
使用3.4.1 hazelcast版本。
**Map Store Config**:
MapStoreConfig mapStoreConfig = new MapStoreConfig();
mapStoreConfig.setClassName("Class Name");
mapStoreConfig.setEnabled(Boolean.TRUE);
mapStoreConfig.setWriteDelaySeconds(1);
mapStoreConfig.setWriteBatchSize(100);
mapStoreConfig.setWriteCoalescing(false);
mapConfig.setMapStoreConfig(mapStoreConfig);
**AdjustmentStore Implementation**
public class AdjustmentStore implements MapStore<LocationKey, Adjustment> {
@Override
public void store(LocationKey key, Adjustment adjustment) {
System.out.println("Map Store: store");
RestTemplate restTemplate = new RestTemplate();
if(adjustment != null) {
String url = "http://server_name/xxxxxx";
try{
System.out.println("Map Store: store rest");
restTemplate.put(url, ajustment);
}
catch(Exception ex) {
LOG.error(ex.getMessage(), ex);
try {
throw new Exception("IO error thrown from: " + this.getClass().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}}
**Entry Processor Implementation**
@Override
public Object process(Entry<Key, Adjustment> entry) {
Adjustment adjustment = entry.getValue();
if(adjustment == null) {
adjustment = updatedAdjustment;
}
else {
adjustment.updateAdjustment(updatedAdjustment.getAdjustment());
}
entry.setValue(adjustment);
return adjustment;
}发布于 2015-03-31 17:01:54
https://stackoverflow.com/questions/29358435
复制相似问题