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

时间:2017-05-24 02:44:16

标签: email microservices cqrs

我想开发一个邮件通知服务,以便向客户发送订单批准。订单数据位于非规范化视图(查询方)中,应填写到邮件模板中。然后,我们通过邮件通知服务以html字符串格式发送电子邮件。但是,订单状态应更改为"订单批准电子邮件已发送"。

我还尝试在微服务架构中实现CQRS,ES和DDD概念。 这个程序是否正确并且仍与概念保持一致?

  1. 在命令命令中开发HTTP POST API以发送批准邮件,以便在命令端更改订单状态。
  2. 命令端生成事件"处理订单批准邮件"
  3. 事件处理器处理事件。它应该从查询端/非规范化视图中获取订单数据。
  4. 事件处理器根据数据生成批准邮件并将数据填充到模板中。
  5. 事件处理器将HTTP POST调用到有效负载中邮件正文(html格式)的邮件通知服务。
  6. 事件处理器调用HTTP PUT到订单服务(命令端)将订单状态更改为"订单批准邮件已发送"。
  7. 但是,如果应用此程序,则用户无法获得响应"邮件已发送"实时。如何触发客户端/前端端邮件成功发送?因此,客户端无需刷新或重试对API的多次调用。

    感谢。

1 个答案:

答案 0 :(得分:1)

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

简短版本是我会使用流程管理器。进程管理器侦听事件,并可以根据这些事件发出命令。如果您重新运行活动,请确保您有一种不重新发送电子邮件的机制。

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

这是一个简短的回答。一旦代码运行发送电子邮件,您认为电子邮件无法发送的频率如何?假设你有一个相当强大的系统,我希望它绝大部分时间都可以工作。所以假装它。并且只有在出现问题时才能找到通知用户和/或管理员用户的方法。如果你想得到想象,你可以使用Signalr或一些pub-sub框架之类的东西来向UI发送消息。

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