【问题标题】:Best way to import data using Axon Framwork使用 Axon Framework 导入数据的最佳方式
【发布时间】:2021-11-26 04:16:02
【问题描述】:

使用 Axon 框架导入包含实体的 excel 文件(或进行批量插入)的最佳方法是什么? 我们是否应该使用将excel文件作为字节数组的命令,然后在聚合中解析文件并将每行作为事件发送?或者创建一个事件实体列表(但是如何更新聚合)?还是解析聚合之外的excel文件,然后创建每一行的命令?

感谢您的帮助。

【问题讨论】:

    标签: domain-driven-design cqrs axon


    【解决方案1】:

    这在很大程度上取决于哪种活动对您的业务有价值。

    但总的来说,在聚合之外解析文件(这不是聚合的用途)并触发多个命令(每行一个)将是我的选择。 在这种情况下,您的 EventStore 中的每一行都会有一个事件,这将使发生的事情更加明确。另外,需要注意的是,在这种情况下,您的事件将是细粒度的,而不是那么大,通常我认为这是代码味道 =)

    韩国,

    【讨论】:

    • 谢谢。在这种情况下,我将不得不考虑一个控制器,并最终考虑一个服务,该服务将读取 excel 文件然后创建命令。在我看来,有了这样的框架,我们会尽量避免服务。我的微服务可以由 UI 或其他微服务调用。我尝试限制控制器的使用并赋予命令和查询的使用特权......但在这种情况下,我认为这是不可能的(在哲学中),我必须使用控制器和服务来完成阅读工作文件。
    • 这在很大程度上取决于您的文件所在的位置。你在控制器上得到了什么?它是您可以在某处获取的文件的 id/url 吗?在这种情况下,你最好有一个可以做到这一点的服务。另一种方法是将文件的读取“委托”给外部事件处理程序,这意味着您可以在控制器上触发一个事件,其中 id/url 通知任何组件需要读取/解析/处理文件。比您的外部 EH 会解析文件并触发多个命令。当然,你必须小心重播这样的事件。
    【解决方案2】:

    从技术上讲,您有两个选项(每个选项都有很多变体)

    1. 在客户端解析文件并针对每条记录发出命令
    2. 发送一个包含整个内容的命令(文件本身或转换为另一种格式的内容)。命令处理程序(是否聚合)然后遍历记录并为每个记录执行所需的操作。

    您选择哪一个以及如何实现它取决于很多因素,例如:

    • 数据是否与属于同一聚合的“实体”有关
    • 数据大小(字节数和记录数)
    • 性能和安全要求及限制
    • 需要存储哪些信息(即,系统是否应该“记住”存在“批量插入”)
    • 聚合是事件来源的还是状态存储的
    • ...

    如您所见,任何人都有太多的可能性可以给您一个通用的“最佳方法”。

    也就是说,这是一个非常有趣的问题,可以引发一些架构讨论。不幸的是,StackOverflow 不是拥有这些的正确位置(请参阅 What topics can I ask about here?What types of questions should I avoid asking?)。

    如果您想更详细地讨论这些选项,我建议您将问题发布到 AxonIQ's Discuss platform

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 2016-11-17
      • 2014-01-11
      • 2010-09-21
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      相关资源
      最近更新 更多