使用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将需要放在后续其他请求中。
{ "bookingAmount": 100, "originLocation": "CNHKG", "destLocation" : "USNYC", "destArrivalDeadline" : "2019-09-28" }
涉及到业务对象 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微服务案例源码
使用六边形架构解耦技术代码与业务逻辑