【问题标题】:Axon - Synchronous Saga / Command Validation - UniquenessAxon - 同步 Saga / 命令验证 - 唯一性
【发布时间】:2020-04-12 00:41:22
【问题描述】:

我想创建一个从 REST 控制器上的 sendAndWait 命令到 @Endsaga 的同步 saga 流程(包括中间步骤)。

只有在查询端(单独的项目)发送事件(读取存储查询端的成功或失败)后才能到达@Endsaga,通知 Saga 发生了什么。

这是使用下面链接中描述的传奇模式向客户发送电子邮件的唯一性验证过程的一部分:

http://foreverframe.net/how-to-guarantee-username-uniqueness-with-cqrses/

我不确定如何在 Axon 中正确进行此配置。

你能帮帮我吗?

谢谢。

【问题讨论】:

    标签: microservices cqrs axon


    【解决方案1】:

    我个人认为选项 2(来自您提到的文章)是最务实的。我不同意在命令端为 DB 提到的cons

    为了检查唯一性,我会使用一个小的命令端投影(在命令组件/包内)。在 Axon 中,这将是一个常规的事件处理程序,它将处理事件并以非规范化的方式填充一个小表,因此您可以在稍后的命令处理程序中使用它进行唯一性检查。 此事件处理程序/处理器应为订阅类型 (https://docs.axoniq.io/reference-guide/configuring-infrastructure-components/event-processing/event-processors#event-processors)

    1. 订阅事件处理器将使用相同的事务来存储事件和投影。这就是为什么在这里使用这种特殊类型的事件处理器很重要的原因。立即一致。

    2. 不要在此存储库(投影)之上公开 Axon 查询 API,只需将此存储库注入您的聚合处理程序以检查唯一性。这样,投影 API 将仅可供您的命令组件使用,而不会暴露给外界。

    【讨论】:

    • 谢谢伊万。我想使用选项 4(来自提到的文章)和那里(序列图选项 4)命令处理程序等到 saga 结束。使用来自控制器的 Axon 命令,一旦执行命令处理程序和事件源处理程序(以及发送给客户端 API 调用者的 HTTP 200 OK 成功命令),流程就会返回。在这种情况下,SAGA 执行以同步方式发生(文章(序列图)中描述的命令处理程序可能对此上下文没有意义。对吧?)。如何使用 Axon 配置此选项 (4)? (如果可能)
    • 嗨伊万。有什么想法?你,阿拉德,史蒂文,或者可能是米兰萨维奇,来自 Axon 队的人。我如何使用 Axon 实现文章中的选项 4。谢谢
    猜你喜欢
    • 2020-01-20
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2022-06-13
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多