【问题标题】:Micro-service architecture in .NET Core: pattern or library for services to call each other.NET Core 中的微服务架构:服务相互调用的模式或库
【发布时间】:2019-11-14 05:57:57
【问题描述】:

我是第一次实现micro-service architecture

我的一些服务(.NET Core Web API)需要通过 HTTP 请求相互通信。为此,我在HttpClient 周围注入了一个包装器。

但我怀疑我正在重新发明轮子。在微服务从业者中,有没有模式甚至第三方库来解决这个问题?

【问题讨论】:

    标签: asp.net-core microservices


    【解决方案1】:

    在微服务架构中,最重要的是明确分离关注点和应用程序边界。想象一个简单的设置,带有产品和价格微服务

    一个重要的概念是每个服务都是数据的主人,并拥有自己的数据库。在这个例子中,

    • “产品”服务的客户端将对产品 API 进行 HTTP 调用。
    • 产品 API 将调用价格 API 以获取产品价格
    • 因此,产品 API 依赖于价格 API 来创建响应

    这些是流程的同步部分,通常通过跨边界的 HTTP 调用来实现。您还将拥有解决方案的异步部分,在此示例中,

    • 价格 API 会在价格发生变化时向总线发布事件
    • 每当创建产品时,产品 API 都会发布一个事件
    • 这些事件可能有一个或多个订阅者,它们将响应并可能调用 API 来检索更改的数据。

    其中的关键部分是明确定义您的 API 和消息合约、了解事物是异步还是同步、在整个架构中拥有正确级别的遥测以跟踪和了解分布式系统行为,并保持一切都可独立构建/可测试/可部署组件。

    【讨论】:

      【解决方案2】:

      首先,如果您不使用容器,请连同编排一起启动(Visual Studio 原生支持,假设您实际安装了 Docker 等)。在众多好处中,您可以通过主机名引用您的服务,而不必担心不同环境的端口和不同位置。

      就实际交流而言。这里没有真正的神奇解决方案。 HttpClient 是您使用的,当然,一般来说,是的,您希望有一个包装器来抽象出低级 HTTP 通信内容,因此您的其余代码可以简单地调用该包装器上的简单方法。

      如果您不使用IHttpClientFactory,请开始。如果您已经有一个包装类,那么您已经完成了一半,这样,您不仅可以有效地管理HttpMessageHandlers,这样您就不会耗尽服务器的连接池,而且您还可以使用 Polly 集成来处理短暂的 HTTP 错误,甚至为您的微服务连接执行重试策略、断路器等。

      最后,Refit 库可以让事情变得更加直接。不过,我发现它可以更多地用于大型第三方 API,例如 Facebook、Google 等。由于微服务在设计上应该很简单,因此您可能不会比仅仅拥有自己的包装类节省太多代码。无论如何,它的工作方式是定义一个表示 API 的接口,然后 Refit 使用它来实际发出适当的请求。它有点像一个免费的包装类,但你仍然需要创建接口。

      【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2019-11-09
      • 2022-01-22
      • 2021-11-02
      • 2019-03-03
      • 2014-01-08
      • 2020-08-19
      • 2020-09-12
      相关资源
      最近更新 更多