使用 Axon 4 处理外部合作伙伴时设计命令和事件

Design Commands And Events while Handling External partner with Axon 4

这是一个与使用 Axon 4 设计命令处理相关的问题。

假设我有一个对 Payment 概念建模的域。

实际付款将由外部合作伙伴完成。我想通过以下事件在我的系统中跟踪它:已发出付款请求,然后是 合作伙伴同意付款合作伙伴拒绝付款

命令发出的每个事件都应注册到同一个数据库事务中。

在 Axon 4 中实际呼叫我的合作伙伴的最佳做法是什么?


这是我到目前为止所做的:

,据说

All the data that you need to apply the event should normally be available in the command

考虑到这句话,我明白我应该创建与事件一样多的命令吗?但是在这种情况下,所有这些命令的意义何在?我应该以这样的方式结束吗:

The actual payment will be done by an external Partner

这意味着您的应用程序不是真实的来源,它不应试图表现得像真实的那样。这意味着它应该只观察远程系统中发生的事情,并可能对远程事件做出反应。 "observe" 可能意味着 duplicate/copy 本地数据库中的远程事件,未经修改,仅出于缓存原因或显示原因。你的系统不应该直接对这些事件给出其他解释,而不是它们的来源给出的解释。

将远程事件复制到本地后,您的系统可以对其做出反应。这可能意味着 Saga 在收到 Partner Agreed the Payment 后会向本地聚合发送 UnlockFeature 命令(参见 DDD)。

With this statement in mind, I understand that I should create as much Commands as Events ? But In this case, what is the point of all theses commands ?

这表明那些不是你的事件:你不应该从你的代码中发出它们;在 最坏的 情况下,您存储它们并对它们做出反应(在 Saga/Process 管理器中)。这意味着您应该发现本地业务流程并对其建模:它们通过发送命令对事件做出反应。