18.Axon框架-前言

461 阅读4分钟

前言

1.介绍

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

下图是一个典型的基于Axon框架的系统设计:

1755958955127.png

2.整体架构

从整体架构进行分析,Axon框架由三大部分组成,包括领域模型组件、分派模型组件和Axon Server

其中,领域模型组件是Axon的核心组件,能帮助开发人员构建符合事件溯源和CQRS模式的DDD应用程序

分派模型组件提供针对领域模型的逻辑基础架构,包括支持对命令和查询的路由及协调操作,这些操作在Axon框架中同样被用来处理领域模型状态

Axon Server为前面提到的领域和分派模型组件提供物理基础架构

下图展示了Axon框架提供的技术组件的详细组成,可以看到Axon框架内置了一个外部对接组件,可以和MongoDB、Kafka等第三方基础设施组件进行交互,从而满足不同场景下的定制化需求

3.工作流程概述

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

asdadsCC.jpg

在上图中,我们可以看出,位于上半部分的组件能够改变应用程序的状态,而位于下半部分的组件则读取或查询应用程序的状态。显然,在这种明确的分离状态中,我们嵌入了CQRS架构模式

我们可以进一步梳理整个DDD应用程序的工作流程。首先发起改变状态的操作,这类操作被建模为命令。而命令被传递到命令总线,命令总线找到针对这一命令的命令处理程序。我们知道,状态的变更过程是在命令处理程序中进行的,该处理程序使用资源库加载领域对象并执行业务逻辑,将业务逻辑处理所引起的变化作用到它的状态。一旦状态发生变化,代表状态变更的领域事件将被发布到事件总线,事件总线则确保将领域事件传递到必要的事件处理程序。最终,事件处理程序完成对领域事件的处理并把它们保存到事件存储器中,这样我们就可以查询到最新的领域状态信息

基于Axon框架提供的这些技术组件,开发人员无须从零开始实现CQRS架构模式和事件溯源机制,从而可以专注于业务逻辑的实现过程

4.Axon Server

介绍

Axon服务器是Axon框架为开发人员提供的一个可视化服务器组件,包括一批即插即用的功能组件

1753324833657.png

下载与启动

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

1753324906190.png

可以看到,这个控制台提供了一组监控和管理Axon服务器的功能,既包括设置、搜索、概览、用户等常规功能,也包括命令、查询等与CQRS直接相关的浏览界面,还包括与第三方组件进行集成的插件界面

5.DDD与Axon的映射关系

DDD 概念Axon 实现
聚合@Aggregate
实体@AggregateMember
命令Command Message
领域事件Event Message
事件存储Event Store
读模型Projection / Query Model
值对象

6.相关组件

领域模型组件

  • @Aggregate:表示当前类是聚合
  • @CommandHandler:表示当前方法用于处理Command
  • @QueryHandler:表示当前方法用来处理Query
  • @EventHandler:表示当前方法用来处理Event
  • @EventSourceHandler:事件溯源支持
  • @AggregateMember:表是当前属性是实体

分派模型组件

  • CommandBus:命令总线
  • EventBus:事件总线
  • QueryBus:查询总线