整个外卖系统架构包括三个系统订单管理、餐厅管理和快递管理。
案例场景:客户使用 Web 应用程序在当地餐馆下订单。应用程序协调餐厅/厨房订单的准备工作,以及交付订单的快递员网络。
建模
事件建模是一种使用示例来描述系统的方法,该示例说明系统内的信息如何随时间发生变化。
架构
C4软件架构模型是考虑软件系统的容器中,组件和类(或代码)方面的静态结构简单的分级方式。
系统Context图可以成为绘制和记录软件系统的有用起点,允许您退后一步查看大图。
技术框架:
- 事件驱动微服务
- 事件溯源
- CQRS
语言平台:
- Java
- Axon
- Spring(Boot)
- SQL(Postgres)
- Docker
- Testcontainers
- Kubernetes
- Prometheus
- Grafana
- Jaeger
1. 订单管理系统
接单和执行管理系统。协调餐厅和快递系统的订单管理。
- 领域事件

实例说明 (SBE) 是一种协作方法,它基于使用实际示例而不是抽象语句来捕获和说明需求,为软件产品定义需求和面向业务的功能测试。

- 订单架构:
一旦您通过系统上下文图了解您的系统如何适应整个 IT 环境,下一步非常有用的就是用容器图说明高级技术选择:

继显示高级技术决策的容器图之后,您可以开始放大和进一步分解每个容器:

服务接口gRPC命令:
- PlaceOrderCommand
- RejectOrderCommand
- AcceptOrderCommand
- MarkOrderAsPreparedCommand
- MarkOrderAsCollectedCommand
- MarkOrderAsExpiredCommand
- MarkOrderAsDeliveredCommand
- MarkOrderAsPayedCommand
服务接口的gRPC事件:
- OrderPlaced
- OrderRejected
- OrderAccepted
- OrderPrepared
- OrderCollected
- OrderExpired
- OrderDelivered
- OrderPayed
领域模型Order:
调用下游:
- FindAllMenusQuery (Restaurant system)
- PlaceRestaurantOrderCommand (Restaurant system)
- CreateShipmentCommand (Courier system)
订阅上文:
- RestaurantOrderRejectedEvent (Restaurant system)
- RestaurantOrderPlacedEvent (Restaurant system)
- RestaurantOrderPreparedEvent (Restaurant system)
- ShipmentCollectedEvent (Courier system)
- ShipmentExpiredEvent (Courier system)
- ShipmentDeliveredEvent (Courier system)
2. 餐厅
管理餐厅菜单和其他信息,包括位置和营业时间。管理餐厅厨房的订单准备工作。
- 领域事件模型:

实例说明 (SBE) 是一种协作方法,它基于使用实际示例而不是抽象语句来捕获和说明需求,为软件产品定义需求和面向业务的功能测试。

- 餐厅技术架构:
一旦您通过系统上下文图了解您的系统如何适应整个 IT 环境,下一步非常有用的就是用容器图说明高级技术选择:

继显示高级技术决策的容器图之后,您可以开始放大和进一步分解每个容器:

服务接口gRPC命令:
- CreateRestaurantCommand
- ActivateRestaurantMenuCommand
- PassivateRestaurantMenuCommand
- PlaceRestaurantOrderCommand
- MarkRestaurantOrderAsPreparedCommand
gRPC查询:
- FindRestaurantQuery
- FindMenuQuery
- FindAllMenusQuery
- FindRestaurantOrderQuery
- FindAllRestaurantsQuery
- FindAllRestaurantOrdersQuery
gRPC发布事件:
- RestaurantCreatedEvent
- RestaurantMenuActivatedEvent
- RestaurantMenuPassivatedEvent
- RestaurantOrderPlacedEvent
- RestaurantOrderPreparedEvent
- RestaurantOrderRejectedEvent
3. 快递
管理快递信息。订单的快递员视图(管理订单的交付)。
- 领域事件:快递管理系统的事件模型:

实例说明 (SBE) 是一种协作方法,它基于使用实际示例而不是抽象语句来捕获和说明需求,为软件产品定义需求和面向业务的功能测试。

- 技术架构
一旦您通过系统上下文图了解您的系统如何适应整个 IT 环境,下一步非常有用的就是用容器图说明高级技术选择:

继显示高级技术决策的容器图之后,您可以开始放大和进一步分解每个容器:

服务接口gRPC命令:
- CreateCourierCommand
- CreateShipmentCommand
- AssignShipmentCommand
- MarkShipmentAsDeliveredCommand
查询:
gRPC:
- FindCourierQuery
- FindShipmentQuery
- FindAllCouriersQuery
- FindAllShipmentsQuery
发布的事件:
gRPC:
- CourierCreatedEvent
- ShipmentCreatedEvent
- ShipmentAssignedEvent
- ShipmentNotAssignedEvent
- ShipmentDeliveredEvent
- ShipmentExpiredEvent
项目源码:
- 订单域:https://github.com/fraktalio/order-demo
- 餐厅域:https://github.com/fraktalio/courier-demo
- 快递域:https://github.com/fraktalio/courier-demo