微服务架构事件协作模式

时间:2018-03-11 23:17:23

标签: microservices event-sourcing

Martin Fowler对事件协作模式(https://martinfowler.com/eaaDev/EventCollaboration.html)的描述似乎暗示应该在服务中复制和维护服务运行所需的必要外部数据(来自其他服务的数据)。

这似乎暗示我们不应该发出明确的查询。 例如:

假设您有一个负责向客户发送电子邮件的通信服务,并且是依赖订单信息(位于订单服务中)以发送订单确认电子邮件。

通过事件协作,通信服务将通过消耗相关的订单创建/修改事件,对所有订单进行内部表示。

在此示例中,不需要用于检索订单详细信息的查询来生成确认电子邮件。

在采用事件协作模式时,是否存在使用显式查询消息而非数据复制的实例?

1 个答案:

答案 0 :(得分:0)

我认为即使在这种情况下,我要做的就是在Order Microservice Only中创建OrderPlaced事件的消费者。该事件处理器将从订单中读取所有详细信息,创建MailToBeSent事件并将其写入主题或队列,CommunicationService应该监听并发送电子邮件。

通信服务不应该理解,如何根据订单创建电子邮件(因为通信服务的核心目的是发送电子邮件)。

设计明智,每次添加想要邮件发送功能的新服务时,通信服务都不需要更改。