我正在使用NServiceBus向后端系统发送订单(每个命令一个订单)。每个订单都有一个客户(父母)。成功保存订单后,后端系统会发布“订单已接受”事件。该事件有多个订户,其中一个是文件生成器组件,它生成要由第三方使用的XML文件。此文件是按客户生成的。由于每次发布“订单接受”事件时发布的事件都处于订单级别,因此文件组件会为客户创建整个文件。
NServiceBus中是否有一种方法可以在订阅者处对事件进行分组,这样,如果同一个客户有多个订单,我们可以减少文件生成器运行的次数?
我们的一个想法是让订阅者在一段固定的时间内休眠,当它被唤醒时,它可以将消息分组到客户的队列中,并为每个客户生成一次文件。这听起来像个好主意吗?
提前致谢。
答案 0 :(得分:7)
这样做的最好方法是使用具有辩护者行为的Saga。
该传奇将订阅该事件,并且每次观察时,都会在您愿意等待的一段时间内请求新的超时,比方说5分钟。
如果超时消息到达并且自设置以来没有观察到其他事件,则可以发送命令来运行文件生成器。
这假设传入的事件将以喷射的形式到达,也就是说,您将在一段时间内收到它们的组合,然后没有。使用这样的去抖动器,如果你每分钟永远收到一个事件,那么文件生成器永远不会被执行。