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