【问题标题】:Is there any specific way for Axon migration from 2.4.3 version to 3.1.1Axon 从 2.4.3 版本迁移到 3.1.1 有什么具体方法吗
【发布时间】:2018-01-06 04:43:35
【问题描述】:

我是 axon 的新手,正在从 Axon 2.4.3 迁移到 3.1.1,但我找不到任何可用于其他版本的迁移指南? 您能否分享您的经验如何做同样的事情。 我面临很多问题,一些类已被删除,一些包已被更改。 对于某些课程,我什至无法找到替代品,所以请帮助我提出一些建议。 如果有相同的指南,请提供链接。

提前致谢

实际上,我无法找到轴突 2.4.3 中的替代品 ClusteringEventBus- DefaultClusterSelector- EventBusTerminal- SimpleCluster- SpringAMQP终端- SpringAMQPCConsumerConfiguration- ListenerContainerLifecycleManager-

【问题讨论】:

  • 您缺少的课程列表,因此找不到正确的替代品,可能会帮助其他人更快地回答您的问题。

标签: java spring rabbitmq cqrs axon


【解决方案1】:

目前还没有正式的 Axon 2.x 到 3.x 迁移指南,尽管它正在积压中待推出。 但是,我可以为您提供一些在迁移时应注意的提示:

  1. AbstractAnnotatedAggregateRoot 对于您的聚合不再是必需的,因此请将其删除。
  2. 现在可以使用静态 AggregateLifecycle.apply() 函数在聚合中发布事件,因此请导入它。
  3. AbstractAnnotatedSaga 对于您的 Sagas 不再是必需的,因此请将其删除。
  4. 如果在 Spring 应用程序中,建议在聚合上使用 @Aggregate 注释,以通知 Spring 为聚合创建所有必需的 bean(存储库、工厂、、、)。
  5. 如果在 Spring 应用程序中,建议在 saga 上使用 @Saga 注解,以通知 Spring 为 Saga 创建所有必需的 bean(存储库、管理器、、、)。
  6. domain_event_entry 表添加了globalIndex 列,如果您已经有相当多的事件需要正确迁移。 This 帖子提供了一些 Axon 框架用户如何解决此问题的见解。
  7. 在 Axon 2.x 中,您有集群的概念,您是否可以将事件处理组件分组。这已被事件处理组所取代,您可以在 SubscribingEventProcessor 之间进行选择(推送事件处理组件)和一个TrackingEventProcessor(拉取存储的事件并在您的事件处理组件中处理它们)。
  8. 在 Spring / Axon 2.x 组合中,您可能已经通过 Spring XML 使用了配置。在 3.x 中,您可以使用 (1) Configurer API,(2) 在 Spring 配置类上使用 @EnableAxon 注释或(3 - 推荐)使用 axon-spring-boot-starter 依赖项来自动获取所有 Axon bean。

这是我能想到的,但我可能忘记了一些指示。您还可以找到一些有关迁移的信息 in this Axon User Group post,或者更一般地说,Axon User Group 可能有一些您正在寻找的东西。

顺便说一句,请随时更新您的问题,然后我可以更新我的答案以填补您仍然缺少的空白!

更新

这一点是关于从 2.4.3 更新到 3.1.1 时缺少的特定类:

就像我在之前的回复中分享的那样,确切地说是第 7 点,Axon 2.x 中的完整集群方法已被 Axon 3.x 中的事件处理器方法取代。 从概念上讲,这里没有太大变化,但在内部它的行为有所不同,并且有意更简洁。所以简短的回答是,所有这些类都已被事件处理器替换,其文档为here

因为这根本不是很有帮助,所以我会给你一个具体的答案来帮助你解决你所缺少的课程。篇幅较长,请做好准备:

  • ClusteringEventBus:这是为了将事件发布到事件处理组件集群。在 Axon 3.x 中,它现在位于处理组后面,由订阅或跟踪实现处理。因此,不要搜索ClusteringEventBus 将事件发布到组。所有 3.x EventBus 实现都知道如何将事件发布到 SubscribingEventProcessor,而 TrackingEventProcessor 将从存储本身提取事件(因此不涉及总线)。
  • DefaultClusterSelector:集群选择器负责将事件处理组件/事件侦听器分组到集群中。作为共享,我们不再将一组事件监听器视为一个集群,而是将其视为一个处理组。 3.x 中的行为是,您的事件侦听器实现的包名称是使用的处理组的名称。但是,您可以覆盖它,但将 @ProcessingGroup({processing-group-name}) 作为类级别注释添加到您的事件侦听器实现中。 Axon 3.x 配置将自动将具有相同处理组名称的事件侦听器分组到同一事件处理器下(在 2.4.x 中将转换为同一集群)。默认情况下,使用的事件处理器实现将是订阅。这可以在配置中调整为 Tracking。
  • SimpleCluster:从我之前的解释如下,不再有SimpleCluster。这已被 EventProcessor 接口取代,该接口由订阅和跟踪事件处理器实现。
  • EventBusTerminalEventBusTerminal 负责将事件发布到正确的集群,无论是本地还是远程。作为共享,我们不再有集群,而是事件处理器组。事件如何到达事件处理器取决于所使用的实现。如果使用订阅(阅读:默认事件处理器),EventBus 负责将事件发布给他们。但是,TrackingEventProcessor 将异步启动它自己的线程以从EventStore 中提取事件并将这些事件发送到其事件侦听器。因此,您不再需要搜索 EventBusTerminal,因为它已过时。
  • SpringAMQPTerminal:正如我在上面分享的,EventBusTerminal 已被删除,以支持订阅或跟踪方法。从 Axon 3.1.1 开始,对于 Spring AMQP,我们有一个订阅事件处理器实现来监听事件并将它们发布到队列上,即SpringAMQPPublisher
  • SpringAMQPConsumerConfiguration:这个配置类已经到位,因为在引入 axon-amqp 时,Spring 并没有像在 Axon 3.x 的引入点那样创建 ListenerContainers。因此,我们决定不为这个消费者设置我们自己的配置,并将其留给 Spring 的主管人员。因此,您将找不到 SpringAMQPConsumerConfiguration,应该搜索 Spring 如何为 AMQP 创建消费者。
  • ListenerContainerLifecycleManager:这个类是正确接收从队列传入的所有事件并将它们发送到所有事件侦听器的实现。此类已被 SpringAMQPMessageSource 取代。

希望这能给您@AS 寻找的答案!

【讨论】:

  • Steven 我更新了问题,请你看一下,我仍然无法找到 Axon 2.4.3 中这些类的修复方法
  • 请帮助我真的需要它。
  • 查看更新部分,以更简洁地回答您所缺少的确切课程。
  • 感谢@Steven ...现在在查询方面确实有效...您建议的大多数替代品我都尝试实现它们,现在很好....我可以联系到你如果我需要进一步的帮助??
  • 很高兴听到它对您有所帮助!如果它解决了您的问题,您介意将我的问题标记为答案吗?而且,如果您将来有任何问题,只需将它们放在此处或 Axon Framework 用户组中即可。我积极参与这两项工作,以便能够帮助人们使用它。
猜你喜欢
  • 1970-01-01
  • 2016-01-16
  • 2016-06-18
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多