探索代码 - zilor-net/eShopOnContainers-CN-Wiki GitHub Wiki

这个页面涵盖了 eShopOnContainers 的代码库探索,假设你已经:

应用程序代码概述

在这个代码库中,你可以找到一个示例参考应用程序,它可以帮助你理解如何使用 NET Core 和 Docker 实现一个基于微服务架构的应用程序。

这个示例的业务领域/场景基于 eShop 或 eCommerce,它们被实现为一个多容器应用程序。每个容器都部署了一个微服务(如购物车微服务、商品目录微服务、购物微服务和身份认证微服务),这些微服务都使用 ASP.NET Core 开发,运行在 .NET Core 上。因此,它们可以运行在 Linux容器和 Windows 容器上。

The screenshot below shows the VS Solution structure for those microservices/containers and client apps.

下面的截图显示了这些微服务/容器和客户端应用的 VS 解决方案结构:

  • (入门建议) 打开eShopOnContainers-ServicesAndWebApps.sln ,一个只包含与微服务和 Web 应用程序相关的服务器端项目的解决方案。
  • 打开eShopOnContainers-MobileApps.sln ,一个只包含客户端移动应用项目的解决方案(仅适用于 Xamarin 移动应用)。 它也可以只依赖 mock 工作。
  • 打开 eShopOnContainers.sln,包含所有项目(所有客户端应用程序和服务)的解决方案。

在上图中你可以看到:

  1. src/ApiGateways/Envoy 文件夹,包含了 Envoy 网关的 .yaml 配置文件。
  2. src/ApiGateways/Mobile.Bff.Shoppingsrc/ApiGateways/Web.Bff.Shopping 文件夹里面是 HTTP 聚合器.
  3. src/BuildingBlocks/EventBus 文件夹,包含了一个简化的消息抽象,以及RabbitMQAzure Service Bus 服的实现。
  4. src/Services/Basket 文件夹里面是购物车微服务,一个简单的 CRUD 数据驱动的微服务,使用 Redis 进行持久化。
  5. src/Services/Catalog 文件夹里面是商品目录微服务,也是一个简单的 CRUD 数据驱动的微服务,使用 EF Core 和 SQL Server 进行持久化。
  6. src/Services/Identity 文件夹里面是身份认证微服务。一个基于 Identity Server 4的安全令牌服务(STS),它也使用 SQL Server 进行持久化。
  7. src/Services/Ordering 文件夹,包含了好几个微服务:
    • 购物微服务(Ordering.API)是核心,它是一个高级的领域驱动设计(DDD)的微服务,它使用了几个 DDD 设计模式 和 SQL Server 进行持久化。
    • 购物后台任务微服务(Ordering.Background.Tasks),使用后台服务来处理异步任务。
    • SignalR Hub 微服务,基于 SignalR ,以集中式 Hub 的形式工作,可以实时通知订单流程。
  8. src/Services/Payment 文件夹里面是支付微服务,它模拟了一个简单的支付网关。
  9. src/Services/WebMVC 文件夹里面是 MVC UI 微服务, 它是一个传统的 MVC Web 应用程序。
  10. src/Services/WebSPA 文件夹里面是 SPA UI 微服务, 它是一个基于 Angular 的 SPA 应用程序。
  11. src/Services/WebStatus 文件夹里面是 Web Status 微服务, 它是一个健康监控应用程序,基于开源项目 Xabaril/AspNetCore.DiagnosticsHealthChecks
  12. tests/ServiceTests 文件夹,里面是一些服务间集成测试。

MVC 应用程序 (ASP.NET Core)

这是一个 MVC 应用程序,在这个应用程序中,你可以找到一些有趣的场景,比如如何从运行在服务器端的 C# 中消费基于 HTTP 的微服务,实际上这是一个典型的 ASP.NET Core MVC 应用程序。

由于它是一个服务器端应用程序,因此对其他容器/微服务的访问,是通过内部 Docker 主机网络的内部名称解析来完成的。

SPA (单页应用程序)

提供类似的“电商业务功能”,但使用 Angular 和 Typescript 开发,略微使用了 ASP.NET Core MVC。

这是客户端 Web 应用程序的另一种实现方法。当你想有一个更现代的客户端行为——在每个操作上都不能使用典型的浏览器 round-trip,而是表现得像一个类似于桌面应用程序的单页应用程序。

基于 HTTP 的微服务的消费,是在客户端浏览器的 TypeScript/JavaScript 中完成的,所以客户端对微服务的调用来自 Docker主机的内部网络(比如你的网络,甚至 Internet)。

Xamarin 移动端应用(适用于 iOS, Android 和Windows/UWP)

这是一个客户端移动应用程序,支持最常见的移动操作系统平台(iOS, Android和Windows/UWP)。在这种情况下,微服务的消费是通过运行在客户端设备上的C#完成的,因此它在 Docker 主机内部网络之外(比如从你的网络甚至Internet)。

附加资源