假设我们要为金融应用程序实现一个小型安全子系统,该子系统将在检测到异常模式时通过电子邮件向用户发出警告。对于此示例,该模式将包括所描述的三个事务。安全子系统可以从队列中读取主系统中的事件。
我想得到的是一个警报,它是系统中发生的事件的直接结果,而没有中间模式来模拟模式的当前状态。
- 监控已激活
- 交易已处理
- 交易已处理
- 交易已处理
- 警报已触发(ID:123)
- 已发送警报电子邮件(ID:123)
- 交易已处理
考虑到这一点,我认为事件源可以在这里很好地应用,尽管我有一个没有明确答案的问题。在示例中触发的警报具有明显的副作用,需要发送电子邮件,这种情况只能发生一次。因此,在重放聚合的所有事件时不应发生这种情况。
在某种程度上,我看到需要发送的电子邮件类似于查询方生成的实现,这在CQRS / Event采购文献中已经见过很多次了,尽管差别不大。
在此文献中,查询端是由事件处理程序构建的,该事件处理程序可以在给定点生成状态的实现,从而再次读取所有事件。但是,在这种情况下,由于前面解释的原因,不能完全像那样完成。每个状态都是瞬态的想法在这里并不适用。我们需要记录警报发送到某个地方的事实。
对于我来说,一个简单的解决方案是使用其他表或结构,在其中保留先前触发的警报的记录。由于我们具有ID,因此我们可以检查之前是否发布了具有相同ID的警报。拥有此信息将使SendAlertCommand成为幂等。可以发出几个命令,但副作用只会发生一次。
即使考虑到该解决方案,我也不知道这是否暗示此体系结构对此问题有问题。
- 我的方法正确吗?
- 在哪里可以找到更多有关此的信息?
奇怪的是我还没有找到更多有关此的信息。也许我一直在使用错误的措词。
非常感谢!