【问题标题】:How to batch process events based on time or after specific amount如何根据时间或特定数量批量处理事件
【发布时间】:2021-03-25 14:02:36
【问题描述】:

我有一个事件系统,当特定对象发生更改时,我可以订阅它。收到这个事件后,我想为这个对象执行一个任务。

可能同时更改多个对象。例如。如果我更改 1000 个对象,我会得到 1000 个事件。问题是我要执行的任务处理 1 个对象 1000 次比 1000 个对象 1 次需要更长的时间。我无法更改事件的生成方式。

所以我的想法是在收到这些事件时对其进行批处理。例如。在队列中收集 1000 个项目,并对收集到的事件中的所有对象执行任务。 问题是:当只有 999 个对象被更改时会发生什么?然后我的任务永远不会执行。所以我也想排空队列,例如插入第一个对象后 5 秒。

是否有任何用于此特定任务的库?还是我必须自己使用队列和一些逻辑来构建它来做我想做的事情?

【问题讨论】:

    标签: java multithreading queue


    【解决方案1】:

    我几乎可以肯定不存在一些特定的库,一旦我需要像你这样的事件相同的策略,我所做的就是创建一个队列或存储库来存储事件,并启动一个 ScheduledExecutorService以固定速率运行的任务,以消耗事件,如果没有要消耗的事件,我只是跳过了执行。您甚至可以在 store add 方法中放置一个验证,看看 store 是否有 1000 或更多并且尚未处理,因此您可以触发任务。

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多