微服务与客户端之间的异步通信

问题描述 投票:0回答:1

我们有一个基于微服务架构的应用程序,具有以下组件

  1. 客户端应用程序:asp.net core mvc
  2. API网关:Ocelot
  3. 服务A:asp.net core web api

客户端通过 API 网关使用 Restapi 向服务发送请求。 然后服务A执行一些业务操作,并异步生成数据

现在我们希望将生成的数据异步发送到客户端应用程序并实时更新 UI。 我们尝试了一种解决方案,通过消息代理 RabbitMQ 直接连接服务 A 和客户端应用程序,而不涉及 API 网关。这是否违反了微服务架构中服务和客户端之间的抽象原则?

c# asp.net-core microservices api-gateway messagebroker
1个回答
0
投票

在微服务架构中,抽象和松耦合的原则确实很重要。让我们分解您的场景并讨论通过 RabbitMQ 等消息代理直接连接服务 A 和客户端应用程序、绕过 API 网关的影响。

通过消息代理(RabbitMQ)直接通信:

如果服务 A 通过消息代理直接向客户端应用程序发送异步更新,则会在两个服务之间引入直接耦合。虽然这种方法可以实现实时更新,但它确实削弱了服务之间的分离和抽象,这可能会导致潜在的问题:

a。紧耦合: 理想情况下,微服务应通过定义良好的 API 相互通信,以保持松散耦合。直接连接服务 A 和客户端应用程序可能会导致它们之间的紧密耦合,从而使独立发展和维护服务变得更加困难。

b。依赖性: 客户端应用程序现在依赖于服务 A 的具体实现,这可能会限制在不影响客户端应用程序的情况下替换或修改服务 A 的能力。

c。可扩展性和隔离性:微服务可以独立扩展和部署。通过耦合客户端和服务,您可能会影响微服务架构的可扩展性和隔离优势。

使用API网关:

API 网关充当外部客户端与微服务交互的入口点。它提供了一个抽象层,并允许您:

a。集中关注点: API 网关可以处理横切关注点,例如身份验证、授权、日志记录和请求/响应转换。这使服务能够专注于其核心功能。

b。抽象: API网关对底层服务进行了抽象,允许客户端与统一一致的API进行交互。这增强了在不影响客户的情况下更改或发展服务的灵活性。

c。聚合: API 网关可以聚合和组合来自多个服务的数据,以便为客户端提供更加量身定制的响应,从而减少客户端发出多个请求的需要。

实时更新:

如果需要实时更新,您可以考虑以下内容:

a。事件驱动架构: 您可以实现事件驱动架构,而不是直接耦合客户端应用程序和服务 A。服务 A 发布与生成的数据相关的事件,客户端应用程序通过消息代理订阅这些事件。这在提供实时更新的同时保持了松散耦合。

b。 API网关的参与:如果API网关在编排或聚合数据方面发挥作用,它也可以充当实时更新的桥梁。服务 A 可以将事件发布到消息代理,API 网关可以使用这些事件并根据需要将它们转发到客户端应用程序。

总而言之,虽然绕过 API 网关进行实时更新可能会提供更快的更新,但它确实会在服务之间引入更紧密的耦合。为了维护微服务架构中的抽象和松散耦合原则,请考虑实现事件驱动方法或让 API 网关参与处理实时更新。这有助于确保每个微服务始终专注于其核心职责并且可以独立发展。

© www.soinside.com 2019 - 2024. All rights reserved.