2

我正在使用 NServiceBus 将订单(每个命令一个订单)发送到后端系统。每个订单都有一个客户(父级)。订单保存成功后,后台系统会发布“订单接受”事件。此事件有多个订阅者,其中一个是文件生成器组件,它生成要由第三方使用的 XML 文件。该文件是按客户生成的。由于每次发布“订单已接受”事件时发布的事件都处于订单级别,因此文件组件会为客户创建整个文件。

NServiceBus 中是否有办法在订阅者处对事件进行分组,以便在同一客户有多个订单时减少文件生成器的运行次数?

我们的一个想法是让订阅者休眠一段固定时间,当它醒来时,它可以按客户对队列中的消息进行分组,并为每个客户生成一次文件。这听起来是个好主意吗?

提前致谢。

4

1 回答 1

7

最好的方法是使用具有去抖动器行为的 Saga。

saga 将订阅该事件,并且每次观察到它时,都会在您愿意等待的一段时间内请求新的超时,比如说 5 分钟。

如果超时消息到达并且自设置后没有观察到其他事件,那么您可以发送命令来运行文件生成器。

这假设传入的事件将突然到达,也就是说,您将收到一组靠近在一起的事件,然后在相当长的一段时间内都没有收到。使用这样的去抖动器,如果您永远每分钟收到一个事件,那么文件生成器将永远不会被执行。

于 2013-08-15T17:38:24.167 回答