Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从高层使用NServiceBus和EventStore_Nservicebus_Event Sourcing - Fatal编程技术网

从高层使用NServiceBus和EventStore

从高层使用NServiceBus和EventStore,nservicebus,event-sourcing,Nservicebus,Event Sourcing,因此,我一直在阅读有关EventStore和NServiceBus的文章,我喜欢拥有数据事务日志的想法,它可以帮助我基于这些数据构建视图 我现在不明白的是,如何区分将写入读存储器的事件和可能触发发送电子邮件的同一事件 例如,创建客户 CreateUserCommand -> CreateUserCommandHandler -> CreatedUserEvent 我是否应该使用CreatedUserEvent来触发对数据存储的写入和向用户发送电子邮件?在过去几年中,Eric Eva

因此,我一直在阅读有关EventStore和NServiceBus的文章,我喜欢拥有数据事务日志的想法,它可以帮助我基于这些数据构建视图

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

例如,创建客户

CreateUserCommand -> CreateUserCommandHandler -> CreatedUserEvent

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

在过去几年中,Eric Evans认识到他的DDD模式的更新:域事件(也称为外部事件概念)

事件源模式中的内部事件是我们一直关注的,例如您的示例中的UserCreatedEvent。使用IEvent标记接口保持这些显式

虽然IEEvents是在总线上发布的,但IDomainEvents对于不影响聚合状态的较大域外通知更为显著

所以

我对自己还是个新手;但是,我想您可以在总线上注册
UserRegistrationService
来监听SendNewUserEmail ICommand


无论您选择哪种方式,我都会集中精力创建用于发送电子邮件的其他命令/事件,并且电子邮件已发送。然后,稍后您可以查看事务日志,了解它何时排队发送、发送需要多长时间、发送过程中是否有重试、同时发送了多少次以及它是否影响了时间延迟(日期时间差异)以显示任何瓶颈?、安装发送电子邮件的队列并将其拆分为较小的独立服务,等等。

在过去的几年里,Eric Evans认识到了DDD模式的一个更新:域事件(也称为外部事件概念)

事件源模式中的内部事件是我们一直关注的,例如您的示例中的UserCreatedEvent。使用IEvent标记接口保持这些显式

虽然IEEvents是在总线上发布的,但IDomainEvents对于不影响聚合状态的较大域外通知更为显著

所以

我对自己还是个新手;但是,我想您可以在总线上注册
UserRegistrationService
来监听SendNewUserEmail ICommand


无论您选择哪种方式,我都会集中精力创建用于发送电子邮件的其他命令/事件,并且电子邮件已发送。然后,稍后您可以查看事务日志,了解它何时排队发送、发送需要多长时间、发送过程中是否有重试、同时发送了多少次以及它是否影响了时间延迟(日期时间差异)以显示任何瓶颈?、安装发送电子邮件的队列并将其拆分为较小的独立服务,等等。

这里的假设是您将发布事件,而不是将其发送到每个端点。这是真的吗?是的,这是正确的,我是在命令执行后发布事件的。Udi Dahan指出,命令/命令处理程序对应该负责触发一个事件,并且只负责该特定事件。不应该有其他对触发该事件。假设事件是在成功写入时发布的,我看不出有多个端点为不同目的拾取和处理该事件有任何问题。这里的假设是您将发布事件,而不是将其发送到每个端点。这是真的吗?是的,这是正确的,我是在命令执行后发布事件的。Udi Dahan指出,命令/命令处理程序对应该负责触发一个事件,并且只负责该特定事件。不应该有其他对触发该事件。假设事件是在成功写入时发布的,我认为让多个端点为不同目的拾取和处理该事件没有任何问题。
CreateUser (ICommand)
 ^- CreateUserCommandHandler

UserCreated (IEvent)
 ^- UserCreatedEventHandler 

SendNewUserEmail (ICommand)
 ^- SendNewUserEmailCommandHandler

NewUserEmailSent (IDomainEvent)
 ^- UserRegistrationService or some other AC