首页 > 解决方案 > Axon Framework - 如何实现上游 - 下游上下文设计

问题描述

在此处输入图像描述使用 Axon 如何在域和子域之间实现上下游 DDD。

我们如何让订单聚合监听运输子域事件。

https://axoniq.io/blog-overview/bounded-contexts-with-axon

标签: axon

解决方案


简短的答案是 Saga,类似于:https ://github.com/idugalic/digital-restaurant/blob/master/drestaurant-libs/drestaurant-order/src/main/kotlin/com/drestaurant/order/domain /OrderSaga.kt#L104

长答案是:这两种服务都公开了消息传递 API(您可以发送的命令、可以发送的查询、可以订阅的事件)。在这种情况下,订单服务取决于运输服务。两种服务都实现了子域模型(Order不是整个域,它可能是一个core / more important子域)。订单域负责order在流程中创建和验证此订单。运输负责交付订单,他们称之为运输。在 Shipping 上下文中,我们对订单及其内容的详细信息不感兴趣,我们主要对送货地址感兴趣。

我在上一节中提到的 order saga 可以处理com.drestaurant.courier.domain.api.CourierOrderDeliveredEvent来自shipping/courier服务并调用 Order 服务上的命令来更新 Order 聚合的状态。需要注意的是,我们在此示例中将消息作为 JAR 文件中的类共享。您应该考虑仅共享/记录消息的模式(例如 JSON),并在依赖服务中拥有此 API 类的副本(不依赖于其他服务的公共 API 模块/jar)。这样你就依赖于消息的序列化,并且你可以自由地在依赖的服务中拥有这个消息/类的稍微不同的副本(例如,你不必反序列化另一端消息的所有属性 - 你可以选择)。这将使您的服务能够更独立地部署,因为它们不共享任何模块/jar。

我不得不承认,从 DDD 中讨论概念并不总是那么容易,而且它们总是与上下文相关。不过,我希望这个答案能让您更清楚地了解您的问题。填写免费以进一步讨论此主题。

最好的,伊万


推荐阅读