axon - Axon Framework - 如何实现上游 - 下游上下文设计
问题描述
我们如何让订单聚合监听运输子域事件。
解决方案
长答案是:这两种服务都公开了消息传递 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 中讨论概念并不总是那么容易,而且它们总是与上下文相关。不过,我希望这个答案能让您更清楚地了解您的问题。填写免费以进一步讨论此主题。
最好的,伊万
推荐阅读
- python - 如何使用 Python 更改 INI 文件中部分的顺序?
- maven - MQRC '2195' ('MQRC_UNEXPECTED_ERROR') 与来自 Maven 的 Tomcat 9 和 MQ libs8
- multiprocessing - python multiprocessing - 在返回时处理结果
- excel - 如何从单元格中提取特定字符?
- python - Apache Beam 将数据流 pub/sub 解析为字典
- css - 在 IE11 的网格容器中设置最小高度
- angular - 当父母需要有关孩子的信息时,事件与 ViewChild
- perl - 如何在 perl 中执行包含 perl 变量的 unix 命令
- python - 下面的代码如何处理整数之和?
- python - 如何正确设置库根目录?