【问题标题】:Hazelcast cache implementation using Apache camel blueprintHazelcast缓存实现使用Apache骆驼蓝图
【发布时间】:2018-07-13 15:02:59
【问题描述】:

我正在尝试使用 Camel 蓝图实现 Hazelcast 缓存。但我无法完成。我能够通过 java 代码(而不是通过 hazelcast XML 配置文件)创建一个 hazelcast 实例。实例已创建,但在实例创建期间未调用缓存加载器类(即使初始化方法为 EAGER)。附上部分代码sn-ps。

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

代码:

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);        
}
}

缓存加载器类:

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>

【问题讨论】:

    标签: java apache-camel hazelcast


    【解决方案1】:

    线

    mapConfigs.put("vehicleMap", mapConfig);
    

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

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

    hazelcastInstance.getMap("vehicleMap"); 
    

    如果配置为:

    mapConfigs.put("vehicleMap*", mapConfig);
    

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

    配置定义了需要时使用的配置。直到您第一次访问地图(即创建地图时)才需要它。

    EAGER”这里指的是地图加载器的运行方式,而不是地图的创建方式。

    【讨论】:

    • 非常感谢尼尔。我能够看到在访问 hazelcastInstance.getMap("vehicleMap") 时调用了加载器类。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多