使用 Apache camel 蓝图的 Hazelcast 缓存实现

Hazelcast cache implementation using Apache camel blueprint

我正在尝试使用 Camel 蓝图实现 Hazelcast 缓存。但是我无法 accomplish.I 通过 java 代码创建一个 hazelcast 实例(不是通过 hazelcast XML 配置文件)。实例已创建,但在创建实例期间未调用缓存加载程序 class(即使初始化方法是 EAGER)。附上部分代码片段。

如果有人遇到这个,请告诉我。

代码:

Hazelcast 配置

public class ConfigHack extends Config {

public ConfigHack(String instanceName ){
    super(instanceName);
    System.out.println("Going to create Hazelcast instance 
................"+instanceName);

    TcpIpConfig tcpIpConfig = new TcpIpConfig();
    List membersList = new ArrayList<String>();
    membersList.add("localhost");
    tcpIpConfig.setMembers(membersList);

    MulticastConfig multicastConfig = new MulticastConfig();
    multicastConfig.setEnabled(true);

    JoinConfig join = new JoinConfig();
    join.setTcpIpConfig(tcpIpConfig);
    join.setMulticastConfig(multicastConfig);

    NetworkConfig networkConfig =  new NetworkConfig();
    networkConfig.setPort(5701);
    networkConfig.setPortAutoIncrement(true);
    networkConfig.setJoin(join);

    GroupConfig groupConfig = new GroupConfig();
    groupConfig.setName("devuser");
    groupConfig.setPassword("devpassword"); 

    MapStoreConfig mapStoreConfig = new MapStoreConfig();
    //Absolute path in class name field below
    mapStoreConfig.setClassName("VehicleCacheLoader");
    mapStoreConfig.setImplementation(new VehicleCacheLoader());
    mapStoreConfig.setEnabled(true);
    mapStoreConfig.setInitialLoadMode(InitialLoadMode.EAGER);
    mapStoreConfig.setWriteDelaySeconds(500);

    MapConfig mapConfig = new MapConfig();
    mapConfig.setName("vehicleMap");
    mapConfig.setBackupCount(2);
    mapConfig.setMaxIdleSeconds(1000000);
    mapConfig.setEvictionPercentage(30);
    mapConfig.setEvictionPolicy(EvictionPolicy.LFU);
    mapConfig.setMapStoreConfig(mapStoreConfig);

    Map<String,MapConfig> mapConfigs = new HashMap<String,MapConfig>();
    mapConfigs.put("vehicleMap", mapConfig);

    //config.setMapConfigs(mapConfigs);
    addMapConfig(mapConfig);
    setGroupConfig(groupConfig);
    setNetworkConfig(networkConfig);        
}
}

缓存加载器class:

public class VehicleCacheLoader implements MapLoader<String, VehicleVO> {

@Override
public VehicleVO load(String paramK) {
    System.out.println("Calling load method for Key " + paramK);
    VehicleVO vehicleVO = new VehicleVO();
    vehicleVO.setCustId("XXX");
    vehicleVO.setVehicleHeader("XXX");
    vehicleVO.setVehicleInitial("001");
    vehicleVO.setVehicleNumber("1234");
    vehicleVO.setVehicleObjId(paramK);
    return vehicleVO;
}

@Override
public Map<String, VehicleVO> loadAll(Collection<String> paramCollection) {
    System.out.println("Calling Load all values() " + "Got key = ");
    VehicleVO vehicleVO = null;
    Map<String, VehicleVO> vehicleDataMap = new HashMap<String, VehicleVO>();
    for (String paramKey : paramCollection) {
        System.out.println("Calling ...." + paramKey);
        vehicleVO = new VehicleVO();
        vehicleVO.setCustId("XXX");
        vehicleVO.setVehicleHeader("XXX");
        vehicleVO.setVehicleInitial("001");
        vehicleVO.setVehicleNumber("1234");
        vehicleVO.setVehicleObjId(paramKey);
        vehicleDataMap.put(paramKey, vehicleVO);
    }   
    return vehicleDataMap;
}

@Override
public Set<String> loadAllKeys() {
    System.out.println("Calling Load all keys() ");
    Set<String> vehicleKeys = new HashSet<String>();
    vehicleKeys.add("XXX001");
    vehicleKeys.add("XXX002");
    vehicleKeys.add("XXX003");
    vehicleKeys.add("XXX004");
    return vehicleKeys;
}
}
Blueprint config:
-----------------
<bean id="hazelcastInstance" class="com.hazelcast.core.Hazelcast"
    factory-method="newHazelcastInstance" destroy-method="shutdown">
    <argument ref="hazelcastConfig"/>
</bean>

<bean id="hazelcastConfig" class="xx.yy.zz.ss.tt.cache.ConfigHack">
    <argument value="TestInstance" />
</bean>

mapConfigs.put("vehicleMap", mapConfig);

定义将用于名称匹配“vehicaleMap”的地图的配置。

为了创建这样的地图,您需要运行对其进行操作,例如

hazelcastInstance.getMap("vehicleMap"); 

如果配置为:

,区别会更清楚
mapConfigs.put("vehicleMap*", mapConfig);

这将在您创建名为“vehicleMap1”或“vehicleMap123”的地图时使用。

配置定义了将在需要时使用的配置。在您第一次访问地图之前不需要它,这是在创建地图时。

"EAGER" 这里指的是地图加载器是如何 运行,而不是地图是如何创建的。