在这里,我将与Akka Persistence开始充当一个现成的工具包,用于Spring Boot服务中的事件驱动、异步、非阻塞流API、事件源和CQRS实现。我们将涵盖以下内容:
- DDD、活动采购和CQRS实施工具包概述。
- Akka Persistence和Spring Boot之间的集成是通过一个初始实现实现的,其中包含了对抽象实体聚合、集群分割、集成测试和流定义的大量抽象。
- 一个展示如何使用它的应用实例。
- 可能设计的总结。
- 下一步是什么和特别说明。
概述
在完成工具包实现之前,如果您还没有实践过这些概念,那么您应该复习领域驱动设计、事件源和CQRS原则。这里有一个好的URL这可以帮助你在需要的时候对这种设计风格的优缺点有一个很好的了解。
我决定使用Akka Persistence来应用事件源的核心原则,加上我在上面的层,来抽象出用它的命令和事件处理流程来定义您的聚合,而不是从头开始实现这些模式。
在工具包中,聚合命令和流处理如下:

流程定义应用编程接口如下:
- 有改变状态的命令处理程序流定义,它们将命令类类型与特定的命令处理程序相匹配。
- 有些事件处理程序将事件类类型与事件处理程序相匹配,后者将执行该事件触发的相关逻辑
- 有些只读命令处理程序不会更改聚合实体的状态。它可以用于查询操作或其他不会通过添加新事件来改变实体状态的操作。
因此,流应用编程接口的不同语义分支是:
- 如果收到命令消息:
- 该命令是事务性的吗:
- 根据该聚合的流应用编程接口定义和具有当前聚合状态的相关当前流上下文,获取该命令类型的相关命令处理程序。
- 执行命令处理程序逻辑,这将触发以下两种情况之一:
- 要持久化的单个事件。然后,在将事件保存到事件存储之后要执行的任何可配置的发布操作(如发布处理和向发送者发回响应)。
- 要持久化的事件列表。然后,在将事件保存到事件存储之后要执行的任何可配置的发布操作(如发布处理和向发送者发回响应)。
- 如果命令是只读的:
- 只需根据该聚合的流应用编程接口定义以及与当前聚合状态相关的当前流上下文,为其执行可配置的命令处理程序。然后,执行任何可配置的后处理操作。
- 如果收到事件消息:
- 根据为聚合定义的流获取相关的事件处理程序,然后根据当前流上下文和聚合状态执行它。
- 如果收到停止消息:
- 如果收到接收超时消息:
- 当一个命令有一个异步流执行时,它将被接收和聚合实体参与者的等待响应模式超时。这是为了避免长时间阻挡演员,这可能导致饥饿和性能问题。
在第2部分中,我们将介绍春季启动Akka活动的启动细节,包括以下内容:
- 阿卡持久性和春季靴之间的平滑集成。
- 用于命令和事件的聚合流定义的通用DSL。
- 如何在所有公共逻辑就位的情况下抽象聚合持久实体参与者。其思想是,它们可以与不同聚合实体的具体托管Spring Beans实现一起使用。
- 通过Spring Boot自定义配置和一个通用实体代理抽象集群着色实现,抽象集群分割运行时配置和访问。
这是GitHub工具包项目link。