2012-08-07 103 views
1

所以我一直在阅读关于EventStore和NServiceBus的内容,我喜欢让我的数据的事务日志可以帮助我基于这些数据构建视图。使用高级别的NServiceBus和EventStore

我现在不明白的是如何区分将写入您的读取存储的事件和可能触发电子邮件发送的相同事件。

ex。创建一个客户

CreateUserCommand -> CreateUserCommandHandler -> CreatedUserEvent 

我是否应该使用CreatedUserEvent触发我写入数据存储并向用户发送电子邮件?

+0

这里的假设是您将发布事件,而不是将它发送到每个端点。真的吗? – 2012-08-10 12:42:54

+0

是的,这是正确的,我发布和执行命令后的事件。 Udi Dahan指出,一个命令/命令处理程序对应该负责发起一个事件,并且只负责该特定事件。没有其他双人应该射击那个事件。 – 2012-08-13 12:52:05

+2

假设事件在成功写入时发布,我没有看到有几个端点为了不同的目的而提取和处理事件的问题。 – 2012-08-13 12:58:12

回答

1

在过去的几年中,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。

无论你走到哪里,我都会集中精力为发送电子邮件创建其他命令/事件并发送电子邮件。然后,稍后您可以查看事务日志,了解它的排队时间,发送时间,发送时是否有重试,同时发送了多少时间,是否会影响时间延迟(日期时间差异)显示任何瓶颈?,安装一个发送电子邮件的队列,并将其分解为一个较小的独立服务等等。