Kar*_*ták 7 domain-driven-design domain-events
我是DDD的新手,我现在正在阅读文章以获取更多信息.其中一篇文章侧重于域事件(DE).例如,发送电子邮件是在执行一段代码时满足某些条件后引发的域事件.
代码示例显示了处理域事件的一种方法,然后是本段
请注意,上述代码将在与常规域工作相同的事务中的同一线程上运行,因此您应该避免执行任何阻止活动,例如使用SMTP或Web服务.相反,更喜欢使用单向消息传递与其他阻止活动的东西进行通信.
我的问题是
谢谢
这是一个普遍的问题时期,更不用说DDD了
通常,在任何需要以高性能方式响应的系统中(例如,Web服务器,任何长时间运行的活动都应该与触发过程异步处理.
这意味着排队.
回滚事务应该从队列中删除项目.
当然,您现在需要其他机制来处理队列中的项目无法处理的情况 - 即未发送电子邮件 - 您还需要在触发代码中允许此操作 - 在之前的过程中使用后续进程RELY已经发生的过程将在某个时刻引起问题.
简而言之,您的排队机制本身应该是事务性的并允许重试,您需要将整个事件链视为工作流.