EdisonXu / EdisonXu.github.io

1 stars 1 forks source link

Axon入门系列(五):第一个正式Axon例子 | event sourcing | CQRS | axon | DDD | Edison Xu's Blog #104

Open EdisonXu opened 5 years ago

EdisonXu commented 5 years ago

http://edisonxu.com/2017/03/30/axon-cqrs-example.html

前面对Axon的基本概念和基本操作做了简介,从本章开始,我们将一步步使用AxonFramework完成一个真正CQRS&EventSourcing的例子。 设计回顾一下使用AxonFramework应用的架构

neveryielding commented 5 years ago

公司正打算采用Axon框架重构之前的项目,你这篇教程写得很实用,感谢分享。

kangkangchen commented 5 years ago

如果使用ES,那么服务启动的时候回加载所有的Aggregation对象吗?感觉不可能是这样啊

EdisonXu commented 5 years ago

@kangkangchen 如果使用ES,那么服务启动的时候回加载所有的Aggregation对象吗?感觉不可能是这样啊

这个可以自定义,你可以选择在启动时就回溯,加载到内存,也可以在调用时再去回溯,也是很快的。

Cloud-Leung commented 5 years ago

有一个疑问点,就是你在Query端定义了一个EventHandler来接受创建事件,以便在query端保存一份数据供查询使用,但是聚合在每次触发命令的时候都会把历史事件进行回朔重放一边,那query端不是每次在聚合有命令过来时也会收到一大堆命令?但实际上query端只希望获取当前聚合最后的状态就够了,不需要对历史的事件都重演一遍。如果只是创建的话还可以在创建时判断是否是否已经创建过,但如果是状态变化命令的话,就基本上等于query端也跟着跑了一遍。

EdisonXu commented 5 years ago

@Cloud-Leung 有一个疑问点,就是你在Query端定义了一个EventHandler来接受创建事件,以便在query端保存一份数据供查询使用,但是聚合在每次触发命令的时候都会把历史事件进行回朔重放一边,那query端不是每次在聚合有命令过来时也会收到一大堆命令?但实际上query端只希望获取当前聚合最后的状态就够了,不需要对历史的事件都重演一遍。如果只是创建的话还可以在创建时判断是否是否已经创建过,但如果是状态变化命令的话,就基本上等于query端也跟着跑了一遍。

回溯已保存的历史事件获得Aggregate最新状态时,并不会重新触发EventHandler。

Cloud-Leung commented 5 years ago

@Cloud-Leung 有一个疑问点,就是你在Query端定义了一个EventHandler来接受创建事件,以便在query端保存一份数据供查询使用,但是聚合在每次触发命令的时候都会把历史事件进行回朔重放一边,那query端不是每次在聚合有命令过来时也会收到一大堆命令?但实际上query端只希望获取当前聚合最后的状态就够了,不需要对历史的事件都重演一遍。如果只是创建的话还可以在创建时判断是否是否已经创建过,但如果是状态变化命令的话,就基本上等于query端也跟着跑了一遍。

回溯已保存的历史事件获得Aggregate最新状态时,并不会重新触发EventHandler。

试了一下,确实不会触发外部的EventHandler。 聚合内部自己的EventHandler方法会触发。 是不是说回朔事件的时候只会执行自己聚合内部的EventHandler,外部的不会执行? 还是说axon有其他方式来区分啊?

pennsong commented 4 years ago

徐老师您好, 请问

  @EventHandler
    public void on(ProductCreatedEvent event){
        this.id = event.getId();
        this.name = event.getName();
        this.price = event.getPrice();
        this.stock = event.getStock();
        LOGGER.debug("Product [{}] {} {}x{} is created.", id,name,price,stock);
    }

中为何没用@EventSourcingHandler? 谢谢!