使用Spring Boot平台的Cargo Tracker应用程序的完整DDD实现。点击标题进入项目。
使用Spring Boot平台的Cargo Tracker应用程序的完整DDD实现。点击标题进入项目。
该实现采用基于微服务的架构风格,并使用以下技术
以Spring Boot为核心
用于微服务编排基础架构的Spring Cloud流
RabbitMQ作为微服务消息传递代理
Spring Data作为数据管理平台
测试用例如下
货物已预订从香港交付至纽约,交付期限为2019年9月28日 (bookingms实现)
根据规格,通过分配行程相应地运输货物(routingms实现)
货物在行程的各个港口处理,最终由客户索取(handlingms实现)
客户可以在任何时间使用唯一的跟踪号跟踪货物(trackingms实现)
四个微服务分别实现上述四个用例需求:
运行: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
运输微服务routingms:该MS负责与货物路线相关的所有操作。涉及到业务对象voyage航线、运输工具carrier_movement
跟踪微服务trackingms:该ms负责与货物相关的所有跟踪操作。涉及业务对象tracking_activity、tracking_handling_events
装卸微服务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实现)
四个微服务分别实现上述四个用例需求:
运行: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
运输微服务routingms:该MS负责与货物路线相关的所有操作。涉及到业务对象voyage航线、运输工具carrier_movement
跟踪微服务trackingms:该ms负责与货物相关的所有跟踪操作。涉及业务对象tracking_activity、tracking_handling_events
装卸微服务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供外界使用。
相关参考:
使用六边形架构解耦技术代码与业务逻辑