带有Angular 11前端的ASP.NET Core微服务

目录

开始吧

服务之间的通信

API网关

内存数据存储

前端应用

用户和课程管理

课程购物车

注册队列

学生课程

API网关

SCM(学生课程管理)网站


微服务,正如处处所定义的,是小型、模块化和可独立部署的服务,Docker容器有助于将服务及其依赖项(例如运行时、代理服务器等)捆绑到一个单元中,然后在隔离环境中运行。在本文中,我们将通过实施的解决方案,其中我们有四个具有松耦合架构的微服务和在Angular 11中实现的前端。 这是docker容器上的基本课程管理微服务解决方案,用户可以购买不同的课程,解决方案包含用户、课程、课程购物车和用户课程管理API,目前,我们使用Docker Compose来运行多个docker

  • 从Github下载源代码

开始吧

如简介中所述,我们有以下四个 API

  • 用户微服务:该微服务提供用户CRUD操作,即LoadAddUpdateDelete用户。在我关于代码项目等的其他博客中,我描述了如何使用CQRS原则、中介、存储库和工作单元设计模式实现用户管理解决方案的每一个细节。底层数据库是SQL Server,我们使用Dapper micro ORM进行数据库操作。
  • 课程微服务:该微服务具有课程管理CRUD操作,除了我们可以添加、更新、删除和加载用户可以购买的课程信息外,遵循与用户API解决方案相同的架构。
  • 课程购物车微服务:该微服务将用户添加到他/她的购物车中并愿意购买的用户课程临时存储在Redis数据库中。
  • 学生课程微服务:一旦用户执行购买的课程操作,用户课程就会从Redis移动到RabitMQ 队列。这个订阅了RabitMQ队列的微服务接收用户购买的课程并将它们保存在数据库中。

服务之间的通信

由于Student Course微服务需要与UserCourse微服务通信,一种方法是手动调用这些服务,但这肯定会在服务之间产生耦合。另一种解决方案是发布者——订阅者模式,其中一个服务将数据发布到某个队列,订阅该队列的所有服务都会收到数据到达的通知,以按照配置的方式使用它。该RabbitMQ的包是我们使用该解决方案一个著名的消息代理。

API网关

API Gateway为所有微服务提供一站式服务,我们可以在配置文件中配置下游和上游 API,例如使用Ocelot API Gateway包,而不是直接调用微服务。API Gateway有很多好处,例如,保持微服务私有并且只公开API Gateway,只在API Gateway上实现身份验证逻辑而不是在每个微服务中复制它,缓存,处理节流等。

内存数据存储

对于课程管理解决方案,我们使用Redis包将签出的课程存储在内存数据源中,这是一种用于存储临时数据的快速、可靠且可扩展的解决方案。

前端应用

对于课程管理应用程序,前端在Angular 11中实现,我们通过API网关调用所有API,有一个用户和课程管理页面以及一个课程结帐和购买课程页面。由于这不是Angular课程,因此您不会看到很多优秀的架构或设计的实现。在此处阅读与Angular相关的文章。

所有项目都在使用相应docker镜像的Docker容器上,例如ASP.NET Core RuntimeNodeRedisRabbitMQ

让我们了解课程管理解决方案

了解决方案的高层架构和业务层面,我们来简单了解一下解决方案中的项目。从Github克隆StudentCourseManagement解决方案。

用户和课程管理

用户和课程项目是添加、更新、删除和加载用户和课程的简单项目。有两个项目文件夹,dbsrc,其中db包含数据库创建脚本和docker文件。该SRC文件夹包含四个项目:

  1. 用户和课程API:包含通过中介与包含业务逻辑的应用程序项目交互的API
  2. 应用程序:应用程序项目实现了CQRS原则,即查询以加载数据和用于其余操作的命令。
  3. 领域:包含实体类、存储库和工作单元接口。
  4. 持久性:包含用于执行数据库操作的存储库和工作单元实现。

我写了非常详细的文章来解释在用户和课程管理项目中实现的简洁架构。克隆存储库并在此处找到学习路径。

编译并运行解决方案后,浏览http://localhost/swagger以测试用户API

编译并运行解决方案后,浏览http://localhost:90/swagger以测试课程API

课程购物车

Course Basket将所选用户及其所选课程临时存储在Redis中。

注册队列

注册队列是一个使用RabbitMQ包实现消息队列逻辑的类库项目。正如我们之前了解到的,为了保持微服务松散耦合,使用发布者——订阅者模式是一个很酷的想法,其中一个微服务可以订阅以排队其他微服务发布数据。Course Basket项目使用这个类库来发布用户和他们选择的课程。我们接下来要研究的Student Course项目订阅队列并将该信息保存在数据库中。

学生课程

这是课程管理层次结构中的最后一个项目,它不断在RabbitMQ队列中查找数据,并在收到任何数据时触发保存用户课程API。您可以查看项目StudentCourse.Application中的EventBusRabbitMQConsumer类,数据接收事件是如何触发的,并调用AddStudentCourseCommand来保存信息。

编译并运行解决方案后,浏览http://localhost:100/swagger以测试学生课程API

API网关

API Gateway项目正在使用Ocelot包为所有微服务提供统一的入口。检查我们定义上游和下游APIocelot.json文件。在SCM.Web与上游侧的API交互,而不是直接与微服务交互。API网关的基本URLhttp://localhost:130,因此所有微服务都通过http://localhost:130访问,例如http://localhost:130/Coursehttp://localhost:130/Userhttp ://localhost:130/CoursesBasket

SCM(学生课程管理)网站

这是一个在Angular 11中开发的前端应用程序,用户可以在其中对用户和课程执行CRUD操作,针对购物车中的用户添加课程并购买购物车中的课程。请记住,这不是最好的Angular架构或不是生产就绪的应用程序,您可以查看Clean Architecture解决方案,该解决方案确实有一个干净的Angular项目,它还支持使用Swagger生成的HTTP客户端和针对API的服务(控制器的操作)进行快速开发。

编译运行解决方案后浏览http://localhost:150浏览前端应用。

https://www.codeproject.com/Articles/5309557/ASP-NET-Core-Microservices-With-Angular-11-Front-E

你可能感兴趣的:(ASP.NET,CORE,微服务,docker,redis,Angular,11,asp.net,core)