api - 微服务中的服务间通信
问题描述
我了解事件驱动架构,其中服务订阅事件以进行服务间通信。创建/更新/删除实体时可以触发事件。但是在 GET 请求的情况下如何实现服务间通信。
例如:返回最终用户的产品通知列表的通知微服务 - 需要读取用户的通知偏好(他想要通知哪些产品),需要获取基本产品信息(产品名称,价格)和通知服务对于通知数据本身。
这可以通过在通知服务中编排所有服务(偏好服务、产品服务)来轻松实现——但这会导致那里的紧密耦合。
当需要从多个服务中获取数据时,在微服务中实现服务间通信的正确方法是什么?
解决方案
这里有一些误解,我将尝试列出它们。事件驱动架构并不是真正用于“服务间通信”。这里的术语事件是指您的系统发生的可能触发状态更改的事情。例如,像这个例子一样陈词滥调的是“存款”和“取款”是发生在您的系统上的特定领域事件。此场景下的存款是存款事件中交易金额的加法,提款是提款事件中的减法。事件驱动架构有效地将数据和数据处理解耦。
这可以通过在通知服务中编排所有服务(偏好服务、产品服务)来轻松实现——但这会导致那里的紧密耦合。
根据上面的观点,从多个微服务中获取数据可能不被认为是紧密耦合的。它也可以被认为是凝聚力。内聚作为一种尊重领域的耦合形式。例如,如果这些首选项特定于通知,则它是通知首选项,因此可以存在于同一服务中。
为了管理您可能希望接收通知的产品,每次创建新产品时,您都可以使用通知服务可能感兴趣的“ProductAdded”事件将产品名称或标识符传播到事件总线。然后,通知服务可以将产品创建为用户可以订阅以接收通知的选项。让我知道这一切是否有帮助,如果我能澄清其他任何事情。
推荐阅读
- java - 如何将数据从 RecyclerView 应用到 MainActivity
- typescript - 您可以定义 Typescript 文件的 esm 导出的类型吗?
- reactjs - 如何在 nextjs 中创建加载更多底部以获取其余数据?(Next.js 分页)
- flutter - 需要帮助:在颤动中源不能为空
- python - 捕获并处理 ZeroDivisionError - python
- android-studio - SurfaceView 摄像头无法录制视频
- python - Python Discord 权限值检查
- entity-framework - Flutter POST & GET 请求相结合
- c# - 注册页面上的 ASP.NET Core 标识,注册然后等待 5 分钟或更长时间
- javascript - 我真的必须添加具有多个不同参数的多个事件侦听器吗?