通过Hazelcast,我想象一个常见的场景是,消费者想要了解当前的世界状态(目前在地图中的内容),然后更新,两者之间没有任何损失。
想象一下这样一个场景:Hazelcast地图正在保存消费者想要流式传输(可能通过Rx)当前状态的各种数据,然后是听众的任何更新。
API建议我们为更新添加一个Listener,并将Map视为普通的ConcurrentMap。但是,在我枚举Map时,可能会通过侦听器进行更新,因此确保项目的正确顺序很难。
我们可以在地图枚举器和侦听器之间共享一个锁,但这似乎有点代码味道。
所以我的问题一般是,如果我们想要流式传输SoTW然后更新,我们该怎么做呢? Hazelcast中是否有任何内容可以帮助我们?
感谢您的帮助
答案 0 :(得分:0)
首先,我想这只是不幸的解释,地图没有订单!
第二件事,Hazelcast地图是一种非快照,非持久性的数据结构。就像ConcurrentHashMap一样,对数据结构的更改会反映到迭代器中,反之亦然。
另一方面,事件是一个完全独立的系统,特别是因为事件是异步传递的。所以可能会发生这样的事件,事件实际上是在你将迭代器推进到相同的元素或另一轮之前到达的。
如果您需要更好的保证,请首先迭代,添加侦听器,在第一次运行开始和可能错过的事件之间应用更改(您需要在第二次迭代中执行增量)。这不是一个真正好处理它的方法,但我不认为还有另一种方式。