Open EdisonXu opened 5 years ago
公司正打算采用Axon框架重构之前的项目,你这篇教程写得很实用,感谢分享。
如果使用ES,那么服务启动的时候回加载所有的Aggregation对象吗?感觉不可能是这样啊
@kangkangchen 如果使用ES,那么服务启动的时候回加载所有的Aggregation对象吗?感觉不可能是这样啊
这个可以自定义,你可以选择在启动时就回溯,加载到内存,也可以在调用时再去回溯,也是很快的。
有一个疑问点,就是你在Query端定义了一个EventHandler来接受创建事件,以便在query端保存一份数据供查询使用,但是聚合在每次触发命令的时候都会把历史事件进行回朔重放一边,那query端不是每次在聚合有命令过来时也会收到一大堆命令?但实际上query端只希望获取当前聚合最后的状态就够了,不需要对历史的事件都重演一遍。如果只是创建的话还可以在创建时判断是否是否已经创建过,但如果是状态变化命令的话,就基本上等于query端也跟着跑了一遍。
@Cloud-Leung 有一个疑问点,就是你在Query端定义了一个EventHandler来接受创建事件,以便在query端保存一份数据供查询使用,但是聚合在每次触发命令的时候都会把历史事件进行回朔重放一边,那query端不是每次在聚合有命令过来时也会收到一大堆命令?但实际上query端只希望获取当前聚合最后的状态就够了,不需要对历史的事件都重演一遍。如果只是创建的话还可以在创建时判断是否是否已经创建过,但如果是状态变化命令的话,就基本上等于query端也跟着跑了一遍。
回溯已保存的历史事件获得Aggregate最新状态时,并不会重新触发EventHandler。
@Cloud-Leung 有一个疑问点,就是你在Query端定义了一个EventHandler来接受创建事件,以便在query端保存一份数据供查询使用,但是聚合在每次触发命令的时候都会把历史事件进行回朔重放一边,那query端不是每次在聚合有命令过来时也会收到一大堆命令?但实际上query端只希望获取当前聚合最后的状态就够了,不需要对历史的事件都重演一遍。如果只是创建的话还可以在创建时判断是否是否已经创建过,但如果是状态变化命令的话,就基本上等于query端也跟着跑了一遍。
回溯已保存的历史事件获得Aggregate最新状态时,并不会重新触发EventHandler。
试了一下,确实不会触发外部的EventHandler。 聚合内部自己的EventHandler方法会触发。 是不是说回朔事件的时候只会执行自己聚合内部的EventHandler,外部的不会执行? 还是说axon有其他方式来区分啊?
徐老师您好, 请问
@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? 谢谢!
http://edisonxu.com/2017/03/30/axon-cqrs-example.html
前面对Axon的基本概念和基本操作做了简介,从本章开始,我们将一步步使用AxonFramework完成一个真正CQRS&EventSourcing的例子。 设计回顾一下使用AxonFramework应用的架构