Spring Boot实现DDD的货运Cargo微服务案例源码(微服务)


xinwang_m@163.com
2020-07-22 03:59:24 (4年前)
Spring Boot;DDD;Cargo

使用Spring Boot平台的Cargo Tracker应用程序的完整DDD实现。点击标题进入项目。

Spring Boot实现DDD的货运Cargo微服务案例源码

使用Spring Boot平台的Cargo Tracker应用程序的完整DDD实现。点击标题进入项目。

该实现采用基于微服务的架构风格,并使用以下技术

以Spring Boot为核心
用于微服务编排基础架构的Spring Cloud流
RabbitMQ作为微服务消息传递代理
Spring Data作为数据管理平台
测试用例如下

货物已预订从香港交付至纽约,交付期限为2019年9月28日 (bookingms实现)
根据规格,通过分配行程相应地运输货物(routingms实现)
货物在行程的各个港口处理,最终由客户索取(handlingms实现)
客户可以在任何时间使用唯一的跟踪号跟踪货物(trackingms实现)
四个微服务分别实现上述四个用例需求:


  1. 预订微服务 bookingms :负责与货物预订相关的所有操作。在运行此微服务之前,必须设置mysql数据表和rabbit mq的设置(队列的创建和绑定)

运行:java -jar bookingms-0.0.1-SNAPSHOT.jar

测试:http://localhost:8080/cargobooking

输入预订信息数据:预订货柜多少数量;出发点是香港,目的地是纽约,交付时间是2019-09-28:

{
“bookingAmount”: 100,
“originLocation”: “CNHKG”,
“destLocation” : “USNYC”,
“destArrivalDeadline” : “2019-09-28”
}

返回的Booking Id将需要放在后续其他请求中。

涉及到业务对象 Cargo、leg 和Location


  1. 运输微服务routingms:该MS负责与货物路线相关的所有操作。涉及到业务对象voyage航线、运输工具carrier_movement


  2. 跟踪微服务trackingms:该ms负责与货物相关的所有跟踪操作。涉及业务对象tracking_activity、tracking_handling_events


  3. 装卸微服务handlingms:该MS负责与货物相关的所有装卸操作。涉及活动有handling_activity。


模块

该源码每个微服务内部以六边形架构设计模块:

微服务模块内部代码以六边形架构设计:

domain:DDD领域模型,其中有aggregates、command、entities和valueobjects等子模块。
application:放置应用服务,命令和查询服务分离在这里。其中有CargoBookingCommandService,这是CQRS的命令服务;CargoBookingQueryService是CQRS查询服务;CargoEventPublisherService是用于向RabbitMQ消息系统发送消息的消息发布者;应用服务主要是与CQRS和消息系统相关的工具或SPI类。
infrastructure: 放置数据库仓储、以及与消息系统相关,这里基础设施包主要是直接与数据库和消息系统技术相关的SPI或帮助类。
interfaces: REST API接口以及相关DTO或事件。这里放置提供被调用的API相关类,包括DTO,领域模型对象不应该直接被外部调用引用,应该转为DTO供外界使用。
相关参考:

使用六边形架构解耦技术代码与业务逻辑,# Spring Boot实现DDD的货运Cargo微服务案例源码

使用Spring Boot平台的Cargo Tracker应用程序的完整DDD实现。点击标题进入项目。

该实现采用基于微服务的架构风格,并使用以下技术

以Spring Boot为核心
用于微服务编排基础架构的Spring Cloud流
RabbitMQ作为微服务消息传递代理
Spring Data作为数据管理平台
测试用例如下

货物已预订从香港交付至纽约,交付期限为2019年9月28日 (bookingms实现)
根据规格,通过分配行程相应地运输货物(routingms实现)
货物在行程的各个港口处理,最终由客户索取(handlingms实现)
客户可以在任何时间使用唯一的跟踪号跟踪货物(trackingms实现)
四个微服务分别实现上述四个用例需求:


  1. 预订微服务 bookingms :负责与货物预订相关的所有操作。在运行此微服务之前,必须设置mysql数据表和rabbit mq的设置(队列的创建和绑定)

运行:java -jar bookingms-0.0.1-SNAPSHOT.jar

测试:http://localhost:8080/cargobooking

输入预订信息数据:预订货柜多少数量;出发点是香港,目的地是纽约,交付时间是2019-09-28:

{
“bookingAmount”: 100,
“originLocation”: “CNHKG”,
“destLocation” : “USNYC”,
“destArrivalDeadline” : “2019-09-28”
}

返回的Booking Id将需要放在后续其他请求中。

涉及到业务对象 Cargo、leg 和Location


  1. 运输微服务routingms:该MS负责与货物路线相关的所有操作。涉及到业务对象voyage航线、运输工具carrier_movement


  2. 跟踪微服务trackingms:该ms负责与货物相关的所有跟踪操作。涉及业务对象tracking_activity、tracking_handling_events


  3. 装卸微服务handlingms:该MS负责与货物相关的所有装卸操作。涉及活动有handling_activity。


模块

该源码每个微服务内部以六边形架构设计模块:

微服务模块内部代码以六边形架构设计:

domain:DDD领域模型,其中有aggregates、command、entities和valueobjects等子模块。
application:放置应用服务,命令和查询服务分离在这里。其中有CargoBookingCommandService,这是CQRS的命令服务;CargoBookingQueryService是CQRS查询服务;CargoEventPublisherService是用于向RabbitMQ消息系统发送消息的消息发布者;应用服务主要是与CQRS和消息系统相关的工具或SPI类。
infrastructure: 放置数据库仓储、以及与消息系统相关,这里基础设施包主要是直接与数据库和消息系统技术相关的SPI或帮助类。
interfaces: REST API接口以及相关DTO或事件。这里放置提供被调用的API相关类,包括DTO,领域模型对象不应该直接被外部调用引用,应该转为DTO供外界使用。
相关参考:

使用六边形架构解耦技术代码与业务逻辑

0 条回复
  1. 动动手指,沙发就是你的了!
登录 后才能参与评论