首页 > 解决方案 > 微服务中的服务间通信

问题描述

我了解事件驱动架构,其中服务订阅事件以进行服务间通信。创建/更新/删除实体时可以触发事件。但是在 GET 请求的情况下如何实现服务间通信。

例如:返回最终用户的产品通知列表的通知微服务 - 需要读取用户的通知偏好(他想要通知哪些产品),需要获取基本产品信息(产品名称,价格)和通知服务对于通知数据本身。

这可以通过在通知服务中编排所有服务(偏好服务、产品服务)来轻松实现——但这会导致那里的紧密耦合。

当需要从多个服务中获取数据时,在微服务中实现服务间通信的正确方法是什么?

标签: apidesign-patternsarchitecturemicroservices

解决方案


这里有一些误解,我将尝试列出它们。事件驱动架构并不是真正用于“服务间通信”。这里的术语事件是指您的系统发生的可能触发状态更改的事情。例如,像这个例子一样陈词滥调的是“存款”和“取款”是发生在您的系统上的特定领域事件。此场景下的存款是存款事件中交易金额的加法,提款是提款事件中的减法。事件驱动架构有效地将数据和数据处理解耦。

这可以通过在通知服务中编排所有服务(偏好服务、产品服务)来轻松实现——但这会导致那里的紧密耦合。

根据上面的观点,从多个微服务中获取数据可能不被认为是紧密耦合的。它也可以被认为是凝聚力。内聚作为一种尊重领域的耦合形式。例如,如果这些首选项特定于通知,则它是通知首选项,因此可以存在于同一服务中。

为了管理您可能希望接收通知的产品,每次创建新产品时,您都可以使用通知服务可能感兴趣的“ProductAdded”事件将产品名称或标识符传播到事件总线。然后,通知服务可以将产品创建为用户可以订阅以接收通知的选项。让我知道这一切是否有帮助,如果我能澄清其他任何事情。


推荐阅读