带有监听器的世界 HazelCast 地图状态

State of the World HazelCast Map with Listener

对于 Hazelcast,我想一个常见的场景是消费者想要了解世界的当前状态(地图中当前有什么),然后在不丢失任何内容的情况下进行更新。

想象一个场景,其中 Hazelcast 地图保存着消费者希望流式传输(可能通过 Rx)当前状态的各种数据,然后是来自侦听器的任何更新。

API建议我们添加一个Listener进行更新,把Map当作一个普通的ConcurrentMap。但是,当我枚举地图时,更新可能会通过侦听器传入,因此很难确保项目的正确顺序。

我们可以在地图枚举器和侦听器之间共享一个锁,但这似乎有点代码味道。

所以我的一般问题是,如果我们想流式传输 SoTW 然后更新,我们该怎么做? Hazelcast 中有什么可以帮助我们的东西吗?

感谢帮助

首先,我想这只是不幸的解释,地图没有顺序!

第二点,Hazelcast 映射是一种非快照、非持久性数据结构。就像 ConcurrentHashMap 一样,对数据结构的更改会反映到迭代器,反之亦然。

另一方面,事件是一个完全独立的系统,尤其是因为事件是异步传递的。所以可能会发生,事件实际上在您将迭代器推进到同一元素或另一轮之前到达。

如果您需要更好的保证,请先迭代,添加侦听器,在第一次 运行 开始和您可能错过的事件之间应用更改(您需要在第二次迭代中执行增量) .这不是一个很好的处理方法,但我认为没有其他方法。