因此,我一直在阅读有关 EventStore 和 NServiceBus 的信息,并且我喜欢拥有我的数据的事务日志的想法,它可以帮助我基于该数据构建视图。
我现在不明白的是如何区分将写入您的读取存储的事件和可能触发发送电子邮件的相同事件。
前任。创建客户
CreateUserCommand -> CreateUserCommandHandler -> CreatedUserEvent
我是否应该使用 CreatedUserEvent 来触发我对数据存储的写入和向用户发送电子邮件?
因此,我一直在阅读有关 EventStore 和 NServiceBus 的信息,并且我喜欢拥有我的数据的事务日志的想法,它可以帮助我基于该数据构建视图。
我现在不明白的是如何区分将写入您的读取存储的事件和可能触发发送电子邮件的相同事件。
前任。创建客户
CreateUserCommand -> CreateUserCommandHandler -> CreatedUserEvent
我是否应该使用 CreatedUserEvent 来触发我对数据存储的写入和向用户发送电子邮件?
在过去的几年里,Eric Evans 认识到他的 DDD 模式的一个更新:领域事件(又名外部事件概念)。
事件溯源模式中的内部事件是我们一直关注的,例如您示例中的 UserCreatedEvent。使用 IEvent 标记接口保持这些显式。
虽然 IEvents 是在总线上发布的,但 IDomainEvents 对于不影响每个聚合状态的较大的域外通知更引人注目。
所以...
CreateUser (ICommand)
^- CreateUserCommandHandler
UserCreated (IEvent)
^- UserCreatedEventHandler
SendNewUserEmail (ICommand)
^- SendNewUserEmailCommandHandler
NewUserEmailSent (IDomainEvent)
^- UserRegistrationService or some other AC
我自己对事件采购还是很陌生;但是,我猜你可以让UserRegistrationService
总线上的寄存器来监听 SendNewUserEmail ICommand。
无论您采用哪种方式,我都会专注于创建用于发送电子邮件的其他命令/事件,并且电子邮件已发送。然后,稍后您可以查看事务日志,包括何时排队发送、发送多长时间、发送时是否有任何重试、同时发送了多少以及是否影响时间延迟(日期时间差异) 显示任何瓶颈?,安装一个发送电子邮件的队列并将其分解为一个较小的独立服务等。