AxonFramework 4.0 重大API变更解析与迁移指南

AxonFramework 4.0 重大API变更解析与迁移指南

AxonFramework Framework for Evolutionary Message-Driven Microservices on the JVM AxonFramework 项目地址: https://gitcode.com/gh_mirrors/ax/AxonFramework

前言

AxonFramework作为CQRS和事件溯源架构的领先实现框架,在4.0版本中进行了重大架构调整。本文将深入分析这些变更,帮助开发者理解其设计理念并顺利完成版本迁移。

核心架构变更

1. 默认处理器类型调整

在4.0版本中,当配置了事件存储(Event Store)或实现了StreamableMessageSource接口的事件总线时,系统将默认使用追踪处理器(tracking processors)。这一变更反映了Axon对事件处理可靠性的重视。

开发者可以通过EventProcessingConfigurer.usingSubscribingProcessors()方法显式覆盖此默认行为。需要注意的是,4.0版本中简单事件总线(SimpleEventBus)不再实现StreamableMessageSource接口,这意味着使用简单事件总线时系统会默认采用订阅处理器(subscribing processors)。

2. 序列化机制优化

序列化处理进行了重要改进:

  • 不再抛出UnknownSerializedTypeException
  • 改为返回UnknownSerializedType对象
  • 提供对原始数据的访问能力,支持多种中间表示形式(如JsonNode、Dom4J Document等)

这一变更使得序列化处理更加灵活,开发者可以更优雅地处理未知类型的情况。

模块结构重构

1. 核心模块拆分

axon-core模块因功能过于庞大被拆分为多个专注的子模块:

| 新模块名称 | 主要功能 | |--------------------|-----------------------------------| | axon-messaging | 消息处理基础机制 | | axon-modelling | 聚合体建模相关功能 | | axon-eventsourcing | 事件溯源实现 | | axon-disruptor | 基于Disruptor的高性能实现 | | axon-configuration | 配置相关基础设施 |

2. 扩展模块重组

原属于核心框架的扩展模块被重新归类,使用新的Group ID:

| 扩展模块 | 新Group ID | |-----------|-------------------------------------| | Spring | org.axonframework.extensions.springcloud | | AMQP | org.axonframework.extensions.amqp | | Kafka | org.axonframework.extensions.kafka | | JGroups | org.axonframework.extensions.jgroups| | Mongo | org.axonframework.extensions.mongo |

这种调整明确了核心框架与扩展组件的边界,使架构更加清晰。

重要API变更详解

1. 事件处理相关变更

  • 移除了AnnotatedSagaSagaStore中的TrackingToken
  • 引入EventProcessingConfiguration接口统一访问事件处理组件
  • SagaConfiguration现在仅作为配置载体,不再负责启动处理器

2. Kafka扩展重构

AsyncFetcherDefaultProducerFactory的构建器模式进行了标准化改造:

// 4.0新写法示例
AsyncFetcher.builder()
    .consumerFactory(myFactory)
    .executorService(executor)
    .messageConverter(converter)
    .build();

主要变更包括:

  • 构造函数改为protected
  • 构建器方法命名规范化
  • 移除了冗余的构建方法

3. 配置类构建器标准化

多个配置类的构建器方法进行了命名统一化:

// 事件条目配置示例
EventEntryConfiguration.builder()
    .timestampProperty("timestamp")
    .eventIdentifierProperty("eventId")
    .build();

类似变更也应用于CommitEntryConfigurationEventSchema等配置类。

4. 命令路由增强

引入@RoutingKey注解作为@TargetAggregateIdentifier的元注解,改进了命令消息的路由策略:

  • AnnotationRoutingStrategy现在会检查@RoutingKey注解
  • 提供了更灵活的路由键定义方式

5. 领域事件序列管理

将聚合ID最后已知序列号的查询能力从EventStore提取到新的DomainEventSequenceAware接口,使职责更加单一。

类路径迁移对照表

4.0版本对多个核心类进行了重新组织,以下是主要类的迁移路径:

| Axon 3 类路径 | Axon 4 类路径 | |--------------|--------------| | org.axonframework.messaging.MessageStream | org.axonframework.common.stream.BlockingStream | | org.axonframework.queryhandling.responsetypes.* | org.axonframework.messaging.responsetypes.* | | org.axonframework.commandhandling.disruptor.* | org.axonframework.disruptor.commandhandling.* | | org.axonframework.eventsourcing.eventstore.* | org.axonframework.eventhandling.* | | org.axonframework.commandhandling.conflictresolution.* | org.axonframework.eventsourcing.conflictresolution.* | | org.axonframework.commandhandling.AggregateAnnotationCommandHandler | org.axonframework.modelling.command.AggregateAnnotationCommandHandler |

迁移建议

  1. 逐步迁移:建议先在新分支上进行迁移测试
  2. 构建器模式:检查所有构建器调用点,更新方法命名
  3. 模块依赖:根据新模块结构调整项目依赖
  4. 类路径变更:使用IDE的全局搜索功能定位需要更新的导入语句
  5. 事件处理:评估默认处理器类型变更对系统的影响

结语

AxonFramework 4.0的架构调整体现了框架向更模块化、更清晰职责划分方向的演进。虽然这些变更带来了迁移成本,但长远来看将提高代码的可维护性和扩展性。建议开发者仔细阅读官方迁移文档,并在测试环境中充分验证后再进行生产环境升级。

AxonFramework Framework for Evolutionary Message-Driven Microservices on the JVM AxonFramework 项目地址: https://gitcode.com/gh_mirrors/ax/AxonFramework

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祁泉望Ernestine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值