Hazelcast 3.8从maptsore加载条目时,不会调用EntryAdded或EntryUpdated事件监视器

时间:2017-09-11 18:01:17

标签: hazelcast hazelcast-imap

我正在尝试在IMap中的记录上设置TTL,该记录是从cassandra mapStore加载的。 为了实现这一点,我为IMap实现了一个EntryAdded和一个EntryUpdated事件监视器。但是,当我从mapstore读取数据并将其放回hazelcast时,不会调用这些方法。

我的期望是错的吗? 如果是这样,那么实现这一目标的可能解决方案是什么?

由于

2 个答案:

答案 0 :(得分:1)

MapLoader.loadAll()将在最初填充 IMap 时生成 ADDED 事件。此后,MapLoader.load()无法为之后加载的对象生成 ADDED 事件。

这是不一致的,并记录为问题https://github.com/hazelcast/hazelcast/issues/7771

即使修复了这个问题,它也不会设置不同的TTL。

为此,您可能需要调查" 缓存 - "设计模式,您的代码测试 IMap 的数据存在,并执行Cassandra检索和Hazelcast保存,这将允许每个条目使用不同的TTL。

答案 1 :(得分:1)

我不认为可以在使用MapLoader加载条目时设置TTL。以下是您可以遵循的方法: 1.检查条目是否不在缓存中 2.如果不在缓存中 - 从数据存储中获取它。使用PUT方法可以设置TTL。您可以将此逻辑包装在Hazelcast Callable中,该逻辑可以配置为分区感知。这将节省网络成本,因为它将在数据所在的节点上执行代码