目前还没有正式的 Axon 2.x 到 3.x 迁移指南,尽管它正在积压中被引入。但是,我可以为您提供一些在迁移时应注意的提示:
AbstractAnnotatedAggregateRoot
您的聚合不再需要,因此请将其删除。
- 现在使用静态
AggregateLifecycle.apply()
函数在聚合中发布事件,因此请导入它。
AbstractAnnotatedSaga
你的 Sagas 不再需要它,所以删除它。
- 如果在 Spring 应用程序中,建议使用
@Aggregate
聚合上的注释来通知 Spring 为聚合创建所有必需的 bean(存储库、工厂、、、)。
- 如果在 Spring 应用程序中,建议使用
@Saga
saga 上的注解来通知 Spring 为 Saga 创建所有必需的 bean(存储库、管理器、、)。
- 该
domain_event_entry
表有一个添加globalIndex
列,如果您已经有相当多的事件需要正确迁移。这篇文章给出了 Axon Framework 用户如何解决这个问题的一些见解。
- 在 Axon 2.x 中,您有集群的概念,您是否可以将事件处理组件分组。这已被事件处理组取代,您可以在
SubscribingEventProcessor
(将事件推送到事件处理组件)之间进行选择) 和 a TrackingEventProcessor
(提取事件并在您的事件处理组件中处理它们)。
- 在 Spring/Axon 2.x 组合中,您可能已经通过 Spring XML 使用了配置。在 3.x 中,您可以使用 (1)
Configurer
API,(2)@EnableAxon
在 Spring Configuration 类上使用注解,或者 (3 - 推荐) 使用axon-spring-boot-starter
依赖项来自动获取所有 Axon bean。
这是我能想到的,但我可能忘记了一些指示。您还可以在此 Axon 用户组帖子中找到有关迁移的一些信息,或者更一般地说,Axon 用户组可能有一些您正在寻找的东西。
顺便说一句,请随时更新您的问题,然后我可以更新我的答案以填补您仍然缺少的空白!
更新
这一点是关于从 2.4.3 更新到 3.1.1 时缺少的特定类:
就像我在之前的回复中分享的那样,确切地说是第 7 点,Axon 2.x 中的完整集群方法已被 Axon 3.x 中的事件处理器方法所取代。从概念上讲,这里没有太大变化,但在内部它的行为有所不同,并且有意更简洁。所以简短的回答是,所有这些类都已被事件处理器替换,文档在此处。
因为这根本不是很有帮助,所以我会给你一个具体的答案来帮助你解决你所缺少的课程。篇幅较长,请做好准备:
ClusteringEventBus
:这是为了将事件发布到事件处理组件集群。在 Axon 3.x 中,它现在位于处理组后面,由订阅或跟踪实现处理。因此,不要搜索ClusteringEventBus
将事件发布到组。所有 3.xEventBus
实现都知道如何将事件发布到 a SubscribingEventProcessor
,而TrackingEventProcessor
将从存储本身提取事件(因此不涉及总线)。
DefaultClusterSelector
:集群选择器负责将事件处理组件/事件侦听器分组到集群中。作为共享,我们不再将一组事件监听器视为一个集群,而是将其视为一个处理组。3.x 中的行为是,您的事件侦听器实现的包名称是使用的处理组的名称。但是,您可以覆盖它,但将@ProcessingGroup({processing-group-name})
作为类级别的注释添加到您的事件侦听器实现中。Axon 3.x 配置将自动将具有相同处理组名称的事件侦听器分组到同一事件处理器下(在 2.4.x 中将转换为同一集群)。默认情况下,使用的事件处理器实现将是订阅。这可以在配置中调整为跟踪。
SimpleCluster
:从我之前的解释如下,不再有SimpleCluster
. 这已被EventProcessor
接口取代,该接口由订阅和跟踪事件处理器实现。
EventBusTerminal
:EventBusTerminal
负责将事件发布到正确的集群,无论是本地还是远程。作为共享,我们不再有集群,而是事件处理器组。事件如何到达事件处理器取决于所使用的实现。如果使用订阅(阅读:默认事件处理器),EventBus
则负责将事件发布给它们。然而TrackingEventProcessor
,它将异步启动它自己的线程以从其中提取事件EventStore
并将这些事件发送到其事件侦听器。因此,您不再需要搜索EventBusTerminal
,因为它已过时。
SpringAMQPTerminal
:正如我在上面所分享的,EventBusTerminal
已删除以支持订阅或跟踪方法。从 Axon 3.1.1 开始,对于 Spring AMQP,我们有一个订阅事件处理器实现来监听事件并将它们发布到一个队列上,这是SpringAMQPPublisher
.
SpringAMQPConsumerConfiguration
:这个配置类已经到位,因为在axon-amqp
引入时,Spring并没有ListenerContainers
像Axon 3.x的引入点那样创建。因此,我们决定不为这个消费者设置我们自己的配置,并将其留给 Spring 的主管人员。因此,您将找不到SpringAMQPConsumerConfiguration
并且应该搜索 Spring 如何为 AMQP 创建消费者。
ListenerContainerLifecycleManager
:此类是正确接收从队列传入的所有事件并将它们发送到所有事件侦听器的实现。此类已被SpringAMQPMessageSource
.
希望这可以为您提供您正在寻找的答案@AS!