前言
1.介绍
Axon Framework是一个用于构建可扩展和高度可维护的企业级Java应用程序的开源框架。Axon是一个CQRS(命令查询责任分离)框架,它将命令和事件驱动的开发模式引入到领域驱动设计(DDD)中,可以帮助开发人员更容易地实现DDD模式。Axon框架提供了很多组件,如聚合、事件总线、命令总线、事件存储和查询模型等
下图是一个典型的基于Axon框架的系统设计:

2.整体架构
从整体架构进行分析,Axon框架由三大部分组成,包括领域模型组件、分派模型组件和Axon服务器
其中,领域模型组件是Axon的核心组件,能帮助开发人员构建符合事件溯源和CQRS模式的DDD应用程序
分派模型组件提供针对领域模型的逻辑基础架构,包括支持对命令和查询的路由及协调操作,这些操作在Axon框架中同样被用来处理领域模型状态
Axon服务器为前面提到的领域和分派模型组件提供物理基础架构
下图展示了Axon框架提供的技术组件的详细组成,可以看到Axon框架内置了一个外部对接组件,可以和MongoDB、Kafka等第三方基础设施组件进行交互,从而满足不同场景下的定制化需求

3.工作流程概述
基于这些技术组件,Axon框架的整体工作流程如下图所示:

在上图中,我们可以看出,位于上半部分的组件能够改变应用程序的状态,而位于下半部分的组件则读取或查询应用程序的状态。显然,在这种明确的分离状态中,我们嵌入了CQRS架构模式
我们可以进一步梳理整个DDD应用程序的工作流程。首先发起改变状态的操作,这类操作被建模为命令。而命令被传递到命令总线,命令总线找到针对这一命令的命令处理程序。我们知道,状态的变更过程是在命令处理程序中进行的,该处理程序使用资源库加载领域对象并执行业务逻辑,将业务逻辑处理所引起的变化作用到它的状态。一旦状态发生变化,代表状态变更的领域事件将被发布到事件总线,事件总线则确保将领域事件传递到必要的事件处理程序。最终,事件处理程序完成对领域事件的处理并把它们保存到事件存储器中,这样我们就可以查询到最新的领域状态信息
基于Axon框架提供的这些技术组件,开发人员无须从零开始实现CQRS架构模式和事件溯源机制,从而可以专注于业务逻辑的实现过程
4.Axon Server
介绍
Axon服务器是Axon框架为开发人员提供的一个可视化服务器组件,包括一批即插即用的功能组件

下载与启动
从官网下载即可,它就是一个SpringBoot程序,使用java -jar启动后,访问8024端口,就可以见到如下界面:

可以看到,这个控制台提供了一组监控和管理Axon服务器的功能,既包括设置、搜索、概览、用户等常规功能,也包括命令、查询等与CQRS直接相关的浏览界面,还包括与第三方组件进行集成的插件界面
5.领域模型组件
- @Aggregate:表明聚合
- @CommandHandler:处理命令的方法
- @QueryHandler:处理查询的方法
- @EventHandler:处理事件的方法
- @EventSourceHandler:事件溯源支持,主要是标明响应事件修改状态的方法
6.分派模型组件
- CommandBus:命令路由组件
- QueryBus:查询路由组件
- EventBus:事件路由组件