来自 CQRS 中非规范化视图的邮件通知

Mail notification from denormalized view in CQRS

我想开发一个邮件通知服务来向客户发送订单批准。订单数据在非规范化视图(查询端)中,应将其填充到邮件模板中。然后,我们通过邮件通知服务以 html 字符串格式发送电子邮件。但是,订单状态应该更改为 "order approval email sent"。

我也尝试在微服务架构中实现 CQRS、ES 和 DDD 概念。 这个过程是否正确并且仍然符合概念?

  1. 开发 HTTP POST API 以发送批准邮件的订单命令,以便可以在命令端更改订单状态。
  2. 命令端生成事件"order approval mail processed"
  3. 事件处理器处理事件。它应该从查询端/非规范化视图中获取订单数据。
  4. 事件处理器根据数据生成批准邮件并将数据填充到模板中。
  5. 事件处理器调用 HTTP POST 到负载中包含邮件正文(html 格式)的邮件通知服务。
  6. 事件处理器调用 HTTP PUT 到订单服务(命令端)以将订单状态更改为 "order approval mail sent"。

但是,如果应用此程序,用户将无法实时获得响应 "mail sent"。如何触发邮件发送成功的客户端/前端?因此,客户端不需要刷新或重试对 API.

的多次调用

谢谢。

我不久前写了一篇关于这个主题的 post,你可以在这里找到它:How to Send Emails the Right Way in a CQRS System

简而言之,我会使用进程管理器。流程管理器侦听事件并可以根据这些事件发出命令。只要确保你有一个机制,如果你重新运行你的活动就不会重新发送电子邮件。

关于UI。我有另一个 post 处理这个问题。您可以在这里找到它:4 Ways to Handle Eventual Consistency on the UI

这是一个简短的回答。一旦代码为 运行 发送电子邮件,您认为电子邮件发送失败的频率是多少?假设您有一个相当健壮的系统,我希望它在绝大多数时间都能正常工作。所以假装吧。并且只有在出现问题时才找到某种方法来通知用户和/或管理员用户。如果您想花哨一些,可以使用 Signalr 或一些发布-订阅框架之类的东西将消息发送到 UI.

无论如何 - 希望对您有所帮助。