目录
开始吧
服务之间的通信
API网关
内存数据存储
前端应用
用户和课程管理
课程购物车
注册队列
学生课程
API网关
SCM(学生课程管理)网站
微服务,正如处处所定义的,是小型、模块化和可独立部署的服务,Docker容器有助于将服务及其依赖项(例如运行时、代理服务器等)捆绑到一个单元中,然后在隔离环境中运行。在本文中,我们将通过实施的解决方案,其中我们有四个具有松耦合架构的微服务和在Angular 11中实现的前端。 这是docker容器上的基本课程管理微服务解决方案,用户可以购买不同的课程,解决方案包含用户、课程、课程购物车和用户课程管理API,目前,我们使用Docker Compose来运行多个docker。
如简介中所述,我们有以下四个 API:
由于Student Course微服务需要与User和Course微服务通信,一种方法是手动调用这些服务,但这肯定会在服务之间产生耦合。另一种解决方案是发布者——订阅者模式,其中一个服务将数据发布到某个队列,订阅该队列的所有服务都会收到数据到达的通知,以按照配置的方式使用它。该RabbitMQ的包是我们使用该解决方案一个著名的消息代理。
API Gateway为所有微服务提供一站式服务,我们可以在配置文件中配置下游和上游 API,例如使用Ocelot API Gateway包,而不是直接调用微服务。API Gateway有很多好处,例如,保持微服务私有并且只公开API Gateway,只在API Gateway上实现身份验证逻辑而不是在每个微服务中复制它,缓存,处理节流等。
对于课程管理解决方案,我们使用Redis包将签出的课程存储在内存数据源中,这是一种用于存储临时数据的快速、可靠且可扩展的解决方案。
对于课程管理应用程序,前端在Angular 11中实现,我们通过API网关调用所有API,有一个用户和课程管理页面以及一个课程结帐和购买课程页面。由于这不是Angular课程,因此您不会看到很多优秀的架构或设计的实现。在此处阅读与Angular相关的文章。
所有项目都在使用相应docker镜像的Docker容器上,例如ASP.NET Core Runtime、Node、Redis和RabbitMQ。
让我们了解课程管理解决方案
了解决方案的高层架构和业务层面,我们来简单了解一下解决方案中的项目。从Github克隆StudentCourseManagement解决方案。
用户和课程项目是添加、更新、删除和加载用户和课程的简单项目。有两个项目文件夹,db和src,其中db包含数据库创建脚本和docker文件。该SRC文件夹包含四个项目:
我写了非常详细的文章来解释在用户和课程管理项目中实现的简洁架构。克隆存储库并在此处找到学习路径。
编译并运行解决方案后,浏览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 Gateway项目正在使用Ocelot包为所有微服务提供统一的入口。检查我们定义上游和下游API的ocelot.json文件。在SCM.Web与上游侧的API交互,而不是直接与微服务交互。API网关的基本URL是http://localhost:130,因此所有微服务都通过http://localhost:130访问,例如http://localhost:130/Course、http://localhost:130/User、http ://localhost:130/CoursesBasket等
这是一个在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