大家好,
我有一个系统(源)需要在某些对象发生变化时异步通知另一个系统(目标)。扭曲之处在于,源系统可能会在很短的时间间隔内多次改变单个对象(更新非常“突发”),在这种情况下,最好只通知目标系统一次,并以最终状态目的。
我的想法是为此在 ThreadPoolExecutor 前面使用某种延时、重复数据删除队列。该队列将:
将项目保留在队列中的时间最短(理想情况下,配置为比典型突变爆发的持续时间长一点点)
如果重复(由对象的标识符定义)入队,则替换现有对象。但是,该项目应该保留其在队列中的原始位置(以避免任何一个项目永远被撞到队列的后面 - 在某些时候我们只需要发送通知,即使另一个项目会暂时出现)。
我在 java.util 中没有看到类似的东西,而且我在这方面的 google-fu 似乎特别弱。
以前有没有人实现过这个,知道这样的 BlockingQueue 实现,或者有关于如何实现一个的提示?
提前致谢!
彼得
PS。我知道 ESB 会做这种事情,但在这种情况下,这种方法过于重量级——理想情况下,我根本不想向源系统添加任何新的库依赖项。