从Queue调度任务

时间:2017-12-29 07:08:49

标签: java queue

我有一个用例,我有一个生成的项目(事件)列表。

我必须定期处理它们(比如30秒)。

我想使用一个队列来存储事件,并让一个调度程序逐个处理这些条目,然后再将它推回到队列中再次处理。

这种方法存在两个问题。

  1. 队列永远不会为空,因此调度程序处于无限循环中。
  2. 无法在多个类似的流程中进行扩展。
  3. 请帮忙。

    我正在使用Spring启动。他们需要进行处理直到以编程方式删除它们。

1 个答案:

答案 0 :(得分:1)

如果您的项目可以包含额外的第三方工具,那么我会按如下方式进行:

对于队列,我使用RabbitMq(带有备份副本)来解决扩展问题,因为所有的spring-boot应用程序都可以轻松订阅RabbitMq

说到30秒延迟,这可以通过几种方式完成。例如,您可以以编程方式“阻止”您的消息30秒,然后将其重新放回队列,消息将由下一个“随机”消费者使用。

其他选项是使用RabbitMq延迟插件。您可以阅读有关此插件here的更多信息。本质上,消息将在交换中保持X秒,然后才会进入队列,然后由消费者处理。