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

Email 来自CQRS中非规范化视图的邮件通知,email,microservices,cqrs,Email,Microservices,Cqrs,我想开发一个邮件通知服务,将订单批准发送给客户。订单数据在非规范化视图(查询端)中,应该填充到邮件模板中。然后,我们通过邮件通知服务以html字符串格式发送电子邮件。但是,订单状态应更改为“已发送订单批准电子邮件” 我还尝试在微服务体系结构中实现CQRS、ES和DDD概念。 该程序是否正确且仍与概念一致 开发HTTP POST API,以便命令发送批准邮件,以便在命令端更改订单状态 命令端生成事件“订单审批邮件已处理” 事件处理器处理该事件。它应该从查询端/非规范化视图获取订单数据 事件处理器根

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

我还尝试在微服务体系结构中实现CQRS、ES和DDD概念。 该程序是否正确且仍与概念一致

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


    谢谢。

    我不久前写了一篇关于这个主题的帖子,你可以在这里找到:

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

    关于用户界面。我有另一篇关于这个问题的帖子。你可以在这里找到它:

    这里有一个简短的答案。您认为,一旦运行代码发送电子邮件,该电子邮件就无法发送的频率是多少?假设你有一个相当健壮的系统,我希望绝大多数时间它都能工作。所以假装吧。只有在出现问题时,才能找到某种方法通知用户和/或管理员用户。如果你想变得更花哨,你可以使用signar或者一些pub子框架来向UI发送消息


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

    订单批准电子邮件是在人工干预下发送的吗?例如,在发送电子邮件的用户界面上,主持人按下按钮?我看不出是否需要第一个事件,即
    已处理订单批准邮件
    Yes。一个人将检查并单击一个按钮向客户发送批准邮件。如果不需要创建
    订单审批邮件处理
    事件,那么在命令端更改订单状态并转到查询端从物化视图生成电子邮件的触发器是什么?确定邮件已成功发送的事件是什么?有没有更好的方法来处理这个问题?你应该将关注点分开。从域的角度来看,您应该
    AnnounceCustomer
    ,因此发出
    CustomerAnnounced
    事件,然后更新内部状态和视图。然后,Saga/侦听器将编写并发送电子邮件,包括基础设施或其他有界上下文。然后,基础结构(邮件发送者)应该发出MailSent和/或MailDelived事件,您可以使用这些事件向ui或任何视图发送信号。当我在电脑上时,我会写一个答案。