从Queue调度任务

问题描述 投票:1回答:1

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

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

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

这种方法存在两个问题。

  1. 队列永远不会为空,因此调度程序处于无限循环中。
  2. 这不能跨多个类似的过程进行扩展。

请帮忙。

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

java queue
1个回答
1
投票

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

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

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

其他选择是使用RabbitMq延迟插件。你可以阅读更多关于这个插件here。本质上,消息将在交换机中保持X秒,然后它将进入队列,然后由消费者处理。

© www.soinside.com 2019 - 2024. All rights reserved.