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

19-09-27 banq
                   

使用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

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

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

4. 装卸微服务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供外界使用。

相关参考:

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

 

                   

2
fateson
2019-09-29 22:33

mysql模式和rabbit mq交换(创建和绑定)????这是什么意思 。

banq
2019-09-30 07:50

必须设置mysql数据表和rabbit mq的设置(队列的创建和绑定)