RestAirline

2025-12-07 0 787

概述

  • 基于EventFlow的经典DDD,具有CQRS-ES,HyperMedia API和无处不在的单元测试项目。它针对ASP.NET Core 3.1,可以部署到Docker和K8S
  • 基于事件流
  • 基于asp.net core3.1
  • 通过EntityFramework,MongoDB,Elasticsearch实施读取模型
  • 集成兔子并使用massTransit作为消息总线(正在进行中)
  • 事件驱动的微服务集成(正在进行中)
  • 基础架构作为Terraform的代码,创建了AWS EKS用于运输此应用程序
  • 维基正在进行

这个项目的想法

  • CQR通过分开命令和查询逻辑来帮助建模纯域
  • 事件采购有助于脱钩域模型和持久性
  • 结合CQR和活动采购使域模型更合理和纯净
  • 同时,不同的有界环境可以演变为不同的微服务,而不同的微服务可以通过异步消息总线事件进行交互
  • 最后,我们获得了基于DDD的微服务体系结构。单个微服务可确保通过CQR和事件采购的域模型的纯度。不同的微服务可以通过消息总线进行交互。最后,所有服务都可以部署到云和K8

域和有限的上下文

该示例是关于航空公司公司的在线预订/检查。一家名为“ RestAirline ”的航空公司提供在线预订/检查。上述业务有四个可能的有限上下文:

  • Booking是关注在线预订的有限背景;
  • Flight Availability是一个有限的环境,将搜索可用的航班和飞行时间表的重点放在首位;
  • Checkin是关注在线检查的有限上下文;
  • Seat Availability是一个有界环境,可维持每次航班的座位;

微服务和通信

通常,每个有限的上下文都可以作为独立的微服务构建,目前我刚刚创建了两个微服务: BookingFlightAvailability 。这两个微服务之间存在一些相互作用,显而易见的行动是,当乘客选择的航班Booking微服务时, FlightAvailability Microservice中的可用航班数量应减去相应的金额。这个想法是,当乘客选择了Booking服务的航班时,一个名为JourneysSelectedEvent的事件将发布到消息总线上,任何对此事件感兴趣的微服务都可以订阅此事件并处理它。

如何运行

克隆这个仓库

git克隆https://g***ithub.com/twzhangyang/restairline.git

运行容器

然后使用docker-compose旋转一个新容器

码头组合

注意:添加一个-d以在背景中运行容器

API服务和MSSQL将在Docker中运行

在本地运行

该项目基于.NET Core 3.1,请为您的操作系统安装相应的SDK:

安装后,请在下面运行以下命令,以确保当前.NET核心版本为3.1.101 dotnet --version

运行API

1。尝试在Postman中输入Home API链接:

获取http:// localhost:61200/booking/home/


2。选择旅程

旅程项目应来自另一个名为“飞行可用性”的微服务,现在让我们在API中自动建立旅程,以方便起见。因此,您无需将任何旅程ID传递给此API。

邮寄 /预订 /旅行

3。添加乘客

我们可以从最后一个API响应中获得请求身体模式,成为整个API由HyperMedia设计。 API定义由resourceCommands\\addPassengerCommand下的最后一个API响应完全描述:

 \"addPassengerCommand\": 
{
    \"bookingId\": \"booking-352cb1f3-0f68-4e04-a2f7-24036eb53ce7\",
    \"name\": null,
    \"passengerType\": 0,
    \"age\": 0,
    \"email\": null,
    \"postUrl\": {
        \"uri\": \"/booking/booking-352cb1f3-0f68-4e04-a2f7-24036eb53ce7/passenger\"
    }
}

显然终点是:

http:// localhost:61100/booking/booking-352CB1F3-0F68-4E04-A2F7-24036EB53CE7/乘客

有效载荷模式是:

 {
	\"bookingId\": \"booking-352cb1f3-0f68-4e04-a2f7-24036eb53ce7\",
    \"name\": null,
    \"passengerType\": 0,
    \"age\": 0,
    \"email\": null,
}

bookingId已经填写,请尝试填写其他参数,例如:

 {
	\"bookingId\": \"booking-352cb1f3-0f68-4e04-a2f7-24036eb53ce7\",
    \"name\": \"test\",
    \"passengerType\": 0,
    \"age\": 22,
    \"email\": \"test@test.com\",
}

发送请求:

邮政预订/{bookingid}/乘客

4。获取预订

根据Last API的响应,您可以通过resourceLinks进行预订,也可以通过resourceCommand发布数据。

获取 /预订 /{bookingid}

5。更新乘客名称

商业

该示例是关于一家航空公司的在线预订。一家名为“ RestAirline ”的航空公司提供在线预订。

  • 乘客提交了可用旅程之一之后,这意味着该乘客开始创建在线预订。
  • 乘客可以提交多个可用的旅程,包括航班在内的每一段旅程。
  • 乘客增加旅程后,他/她可以增加乘客。
  • 预订中添加乘客后,乘客可以更新每个乘客的乘客名称。
  • 乘客可以为每次航班提交可用的座位,每个乘客,座位可能只包括座位号。
  • 一旦乘客提交座位,乘客仍然可以更新座位。
  • 在所有这些步骤之后,乘客有机会为所有乘客订购保险。
  • 最后一步是支付所有预订,如果付款成功,请为此预订创建PNR(六位数)。
  • 所有航班都可以在线检查。乘客可以在以下时间窗口检查:

2H <= TimeWindow <=出发时间-30m

  • 乘客可以在此步骤之后进行在线检查,乘客开始他/她的旅程。

下载源码

通过命令行克隆项目:

git clone https://github.com/twzhangyang/RestAirline.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 RestAirline https://www.zuozi.net/31963.html

nsqproxy
下一篇: nsqproxy
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务