我应该使用什么数据结构来实现剩余最少到期时间的下一种调度

时间:2017-01-02 14:41:29

标签: java data-structures queue message-queue priority-queue

我将获得特定类型的项目。每种类型都有与之相关的到期时间。在继续处理之前,每个项目都会被指定为与其类型相关联的到期时间。

例如,Type1项目在10秒后过期,而Type2项目在5秒后过期。现在考虑Type1 item1来自时间1.因此它应该在时间11执行。现在考虑我在时间2得到Type2 item2所以它应该在时间7执行。现在考虑我在时间3得到另一个Type2 item3所以它应该在时间8执行。所以最终执行顺序是

  • item2 at time 7
  • item3 at time 8
  • 第1项时间11

我应该使用什么数据结构来模拟这种行为?它主要看起来像优先级队列,始终保持项目的下一个处理。是否有任何现成的队列服务器可以自动执行此操作。我已经广泛使用了kafka,但似乎并没有很好地服务于此目的。还有其他选择吗?或者我应该选择普通的Java优先级队列?或者我应该从队列中寻找一些绝对不同的方法吗?

更新

  1. 忘记提及我可能有很多类型。

2 个答案:

答案 0 :(得分:0)

使用DelayQueue来解决这个确切的用例

答案 1 :(得分:0)

你是对的,卡夫卡在开箱即用的实施方面并不适合这一点。

消息顺序保留在分区中,以便保留到时间戳的到达顺序(您也可以将其添加为字段)。在实施优先级方面,使用上面提供的基础知识不应该太难。

排队技术倾向于实现消息传递服务,而您的用例更倾向于面向处理。也许看一下像Apache Spark或Apache Storm这样的处理框架。