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
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供外界使用。
相關參考:
相關文章
- Spring Boot下的一個DDD案例原始碼介紹Spring Boot原始碼
- 使用Docker實現Spring Boot Restful Web服務案例原始碼DockerSpring BootRESTWeb原始碼
- 利用Spring Boot實現微服務的配置中心Spring Boot微服務
- Spring Boot的微服務分散聚集模式教程與原始碼 - vinsguruSpring Boot微服務模式原始碼
- 利用Spring Boot實現微服務的鏈路追蹤Spring Boot微服務
- 基於Spring Boot和Spring Cloud實現微服務架構Spring BootCloud微服務架構
- Spring Boot和Netflix DGS的GraphQL原始碼案例Spring Boot原始碼
- 使用Spring Boot實現微服務架構的開源專案Spring Boot微服務架構
- 使用Spring Boot + Kafka實現Saga分散式事務模式的原始碼 - vinsguruSpring BootKafka分散式模式原始碼
- Spring Cloud OAuth 微服務內部Token傳遞的原始碼實現解析SpringCloudOAuth微服務原始碼
- 基於Istio/gRPC/Redis/BigQuery/Spring Boot/Spring Cloud和Stackdriver的微服務案例RPCRedisSpring BootCloud微服務
- 在Spring Boot實現國際化的案例Spring Boot
- Spring Boot中實現規則引擎原始碼教程Spring Boot原始碼
- Spring Boot + JPA實現MySQL批量更新原始碼 - githubSpring BootMySql原始碼Github
- 精盡Spring Boot原始碼分析 - @ConfigurationProperties 註解的實現Spring Boot原始碼
- Spring Boot中使用斷路器模式實現彈性微服務Spring Boot模式微服務
- 在微服務領域Spring Boot自動伸縮如何實現微服務Spring Boot
- 使用領域驅動設計DDD和CQRS實現身份驗證的微服務原始碼專案微服務原始碼
- Spring Cloud實戰系列(八) - 微服務監控Spring Boot AdminCloud微服務Spring Boot
- 精盡Spring Boot原始碼分析 - 內嵌Tomcat容器的實現Spring Boot原始碼Tomcat
- 精盡Spring Boot原始碼分析 - Jar 包的啟動實現Spring Boot原始碼JAR
- Quarkus和MongoDB微服務簡單案例原始碼MongoDB微服務原始碼
- spring原始碼解析 (七) 事務底層原始碼實現Spring原始碼
- 利用Spring Boot實現微服務的API閘道器統一日誌Spring Boot微服務API
- Spring Boot系列(四):Spring Boot原始碼解析Spring Boot原始碼
- SpringBootHibernateJPA: Spring Boot+ JPA資訊系統案例原始碼Spring Boot原始碼
- 使用Spring Boot實現事務管理Spring Boot
- 精盡Spring Boot原始碼分析 - 支援外部 Tomcat 容器的實現Spring Boot原始碼Tomcat
- 利用Spring Boot實現微服務的API閘道器統一限流與熔斷Spring Boot微服務API
- 在國外是如何用Spring Boot、Spring Cloud、Docker實現微服務系統架構Spring BootCloudDocker微服務架構
- Spring Cloud 微服務實戰——nacos 服務註冊中心搭建(附原始碼)SpringCloud微服務原始碼
- Spring Boot微服務是一種安全的SOASpring Boot微服務
- 使用Spring Boot實現資料庫整合配置案例Spring Boot資料庫
- 微服務11:熔斷、降級的Hystrix實現(附原始碼)微服務原始碼
- 微服務實戰:服務發現的可行方案以及實踐案例微服務
- 使用Spring Boot和Kafka Streams實現基於SAGA模式的分散式事務原始碼教程 - PiotrSpring BootKafka模式分散式原始碼
- 通過Spring Boot,Spring Cloud Gateway構建基於Consul叢集的微服務案例演示 – Piotr的TechBlogSpring BootCloudGateway微服務
- 透過Spring Boot,Spring Cloud Gateway構建基於Consul叢集的微服務案例演示 – Piotr的TechBlogSpring BootCloudGateway微服務