探索代码 - 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,包含所有项目(所有客户端应用程序和服务)的解决方案。
在上图中你可以看到:
src/ApiGateways/Envoy
文件夹,包含了 Envoy 网关的.yaml
配置文件。src/ApiGateways/Mobile.Bff.Shopping
和src/ApiGateways/Web.Bff.Shopping
文件夹里面是 HTTP 聚合器.src/BuildingBlocks/EventBus
文件夹,包含了一个简化的消息抽象,以及RabbitMQ 和 Azure Service Bus 服的实现。src/Services/Basket
文件夹里面是购物车微服务,一个简单的 CRUD 数据驱动的微服务,使用 Redis 进行持久化。src/Services/Catalog
文件夹里面是商品目录微服务,也是一个简单的 CRUD 数据驱动的微服务,使用 EF Core 和 SQL Server 进行持久化。src/Services/Identity
文件夹里面是身份认证微服务。一个基于 Identity Server 4的安全令牌服务(STS),它也使用 SQL Server 进行持久化。src/Services/Ordering
文件夹,包含了好几个微服务:- 购物微服务(Ordering.API)是核心,它是一个高级的领域驱动设计(DDD)的微服务,它使用了几个 DDD 设计模式 和 SQL Server 进行持久化。
- 购物后台任务微服务(Ordering.Background.Tasks),使用
后台服务
来处理异步任务。 - SignalR Hub 微服务,基于 SignalR ,以集中式 Hub 的形式工作,可以实时通知订单流程。
src/Services/Payment
文件夹里面是支付微服务,它模拟了一个简单的支付网关。src/Services/WebMVC
文件夹里面是 MVC UI 微服务, 它是一个传统的 MVC Web 应用程序。src/Services/WebSPA
文件夹里面是 SPA UI 微服务, 它是一个基于 Angular 的 SPA 应用程序。src/Services/WebStatus
文件夹里面是 Web Status 微服务, 它是一个健康监控应用程序,基于开源项目 Xabaril/AspNetCore.DiagnosticsHealthChecks。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)。
附加资源
- 一般设置和初步探索 - [eShopOnContainers issue] https://github.com/dotnet-architecture/eShopOnContainers/issues/1032
- 为什么OrdersController不遵循公共的 REST 规范? - [eShopOnContainers issue] https://github.com/dotnet-architecture/eShopOnContainers/issues/1002
- WebMVC 如何调用 Identity.API? - [eShopOnContainers issue] https://github.com/dotnet-architecture/eShopOnContainers/issues/1043
- MVC 应用到 identity.api 的登录流程不工作 - [eShopOnContainers issue] https://github.com/dotnet-architecture/eShopOnContainers/issues/1050
- 如何使用外部的 SQL Server 机器? - [eShopOnContainers issue] https://github.com/dotnet-architecture/eShopOnContainers/issues/172
- 在多个项目的BFF框架中使用 Ocelot Configuration.Json 文件 - [eShopOnContainers issue] https://github.com/dotnet-architecture/eShopOnContainers/issues/593
- 共享集成事件 - [eShopOnContainers issue] https://github.com/dotnet-architecture/eShopOnContainers/issues/724
- **在 Ordering.Api 中的领域事件 似乎有一个原子性问题 ** - [eShopOnContainers issue] https://github.com/dotnet-architecture/eShopOnContainers/issues/700
- 领域模型应该完全隔离吗? - [eShopOnContainers issue] https://github.com/dotnet-architecture/eShopOnContainers/issues/869
- 事件设计和测试 - [eShopOnContainers issue] https://github.com/dotnet-architecture/eShopOnContainers/issues/924