(第5天)每日源码调试之旅--实现CQRS模式的AXON框架

8 篇文章 3 订阅

接着前一天的调试,断点来到AggregateLifecycle的execute方法:

此处并未直接执行task,而是继续调用AggregateLifecycle的executeWithResult方法:

同之前的调用,此处依然取不到AggregateLifecycle的实例,直接装载其this(子类EventSourcedAggregate实例),返回task的调用:task.run(),进入到原始execute传入的lambda表达式:

设置applying标志,将delayedTasks中task拿出来运行:

task是之前AnnotatedAggregate的doApply方法中添加的publish回调,发布event前先处理参数,将evet包装成eventMessage:

包装细节不提,包装结果如下:

包装完毕,进入EventSourcedAggregate的publish方法:

此处先判断msg是否是domain的事件消息,是的话要获取上一个事件的序列号(默认-1),因为是第一次发布event,所以上一个事件序列号为0。接着是snapshotTrigger的eventHandled,此demo不涉及snapshot操作,snapshotTrigger是NoSnapshotTrigger,eventHandled是空方法,接着调用父类AnnotatedAggregate的publish方法:

inspector是第三天调试时的EventSourcedAggregate初始化时注入的,作用是描述描述聚合类结构的监视器,进入ModelInspector的publish中一睹究竟:

runtimeModelOf(target)大致内容是根据所给的target类型,创建一个相应的inspector,之后调用ModelInspector的doPublish方法:

此处先获取EventMessage的handler,然后调用ifPresent方法:

如果传入的EventMessage不为空,直接调用传入的lambda表达式即调用handler处理EventMessage:

这里跟之前CommandMessage的处理差不多,判断是构造器handler后解析message,进入handle方法:

handle方法只是给ProductAggregate赋值,完毕后返回到ModelInspector的doPublish方法:

依次调用ProductAggregate的子类定义的eventhandler,此处没有子类,跳过,一路返回,回到AnnotatedAggregate的publish方法:

进入EventSourcedAggregate的publishOnEventBus方法:

接下来会进入到发布事件到查询端同步命令端与查询端数据的环节,先暂停,明天继续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值