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

Hazelcast 3.8 EntryAdded or EntryUpdated eventlisteners are NOT invoked when an entry is loaded from maptsore

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

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

谢谢

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

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

即使修复了这个问题,它也不会在进入时将 TTL 设置为与其他设置不同。

为此,您可能需要研究“cache-aside”设计模式,您的代码在其中测试 IMap 的数据存在,并执行 Cassandra 检索和 Hazelcast 保存,这将允许每个条目使用不同的 TTL。

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