我将获得特定类型的项目。每种类型都有与之相关的到期时间。在继续处理之前,每个项目都会被指定为与其类型相关联的到期时间。
例如,Type1项目在10秒后过期,而Type2项目在5秒后过期。现在考虑Type1 item1来自时间1.因此它应该在时间11执行。现在考虑我在时间2得到Type2 item2所以它应该在时间7执行。现在考虑我在时间3得到另一个Type2 item3所以它应该在时间8执行。所以最终执行顺序是
我应该使用什么数据结构来模拟这种行为?它主要看起来像优先级队列,始终保持项目的下一个处理。是否有任何现成的队列服务器可以自动执行此操作。我已经广泛使用了kafka,但似乎并没有很好地服务于此目的。还有其他选择吗?或者我应该选择普通的Java优先级队列?或者我应该从队列中寻找一些绝对不同的方法吗?
更新
答案 0 :(得分:0)
使用DelayQueue来解决这个确切的用例
答案 1 :(得分:0)
你是对的,卡夫卡在开箱即用的实施方面并不适合这一点。
消息顺序保留在分区中,以便保留到时间戳的到达顺序(您也可以将其添加为字段)。在实施优先级方面,使用上面提供的基础知识不应该太难。
排队技术倾向于实现消息传递服务,而您的用例更倾向于面向处理。也许看一下像Apache Spark或Apache Storm这样的处理框架。