如何根据时间或特定数量批量处理事件

How to batch process events based on time or after specific amount

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

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

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

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

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