【问题标题】:Identify and Rerun particular events in Axon识别并重新运行 Axon 中的特定事件
【发布时间】:2020-05-07 19:36:32
【问题描述】:

我们正在研究从 axon 重新运行精心挑选的事件。用例将遵循以下内容。

如果即使命令成功,用户的注册事件也失败了,我们希望为该特定事件处理程序重新运行该特定事件。

我们研究过使用跟踪事件处理器,但这似乎是从特定时间点重放一组事件。但是,在我们的例子中,如果昨天有 100 个事件,我们只想在中间重新运行一个特定事件。

目前我们正在迁移到 Axon,因此决定主要使用 SubscriptionEventProcessors,因为它更加同步(即错误通过命令处理程序传播)。而且我们确实理解订阅处理器是无状态的,因为它们只处理通过事件总线接收到的内容。

所以我假设我们不能使用跟踪处理器?相反,我们需要加载特定事件并将其重新推送到事件总线?

我们怎样才能做到这一点? (有无上述建议)

此外,关于识别异常,我们正在考虑使用方面和日志记录并读取特定日志行以查找异常。然而,我们确实注意到轴突和弹簧靴的跟踪模块。 https://github.com/AxonFramework/extension-tracing 但是它被提到处于测试阶段,我们也找不到太多参考文档。是否还有更好的基于轴突的解决方案?

【问题讨论】:

  • 我这边的一个小评论:扩展跟踪不再处于测试阶段 =)
  • 很好,刚刚注意到自述文件已更新。还有扩展特定的参考文档吗?
  • 看看official doc有没有帮助,如果没有,有一篇关于它的博文here
  • 有点离题,所以我们成功地使用了带有 axon 的 jaeger 和 spring boot 自动配置,但是当我们尝试使用 spring sleuth(它是在勇敢之上的 springs 分布式跟踪库)时,我们包括了勇敢- opentracing、spring-cloud-starter-sleuth 和 spring-cloud-sleuth-zipkin 依赖项。但是在这个配置中,轴突痕迹不会被发送到 jaeger,关于配置应该是什么的任何想法?
  • 我们认为是正确的,但需要进行更多测试。 BraveTracer 没有被创建,所以我们必须手动创建它。

标签: java spring spring-boot axon


【解决方案1】:

为了快点,我会使用我在this问题上发布的类似回复。

我在那边的回复很快,可以总结为: 创建一个查询模型,其中包含“重新处理”所需的 @EventHandler 注释方法,您可以将其作为输入提供给 Axon 的 AnnotationEventHandlerAdapter 构造函数。您将根据您的要求使用过滤的事件流调用后续的AnnotationEventHandlerAdapter。结果,查询模型将更新为您需要的格式。

因此,您不会因为用户需要该信息而将其作为一种查询形式执行,而是在异常情况下执行该操作。无论如何,您仍将重新形成查询模型,但只是基于一组特定的事件。

顺便说一句,在选择事件处理器时,我还是会选择TrackingEventProcessor。是的,这意味着事件失败不会发出回滚,但本质上事件表明它已经发生。因此回滚是因为其他事情无法处理该事件是不正确的;该命令仍然成功,所以它也应该保持原样。

最后,您正在寻找日志记录逻辑。您共享的跟踪扩展程序最近刚刚从测试状态中撤出,因此可以安全使用。接下来,已经可以通过将LoggingInterceptor 配置为MessageHandlerInterceptorMessageDispatchInterceptor 来实现基本日志记录(可以在here 找到有关此的文档)。如果您希望引入 Aspect 逻辑:Axon 有一个类似的机制来绑定到那里的每个消息处理程序。看看this页面上的HandlerEnhancer/HandlerEnhancerDefintion

希望这一切对你有所帮助@MilindaD!

【讨论】:

  • 好吧,在谷歌搜索“AnnotationEventHandlerAdapter”的兔子洞之后,我遇到了另一个你回答的答案,它谈到了使用eventStore.readEvents,这是我们目前正在尝试的。将其与一些弹簧反射相结合,通过函数调用手动触发@Service 适当的事件处理程序方法(因为有效负载属于同一类)。
  • 关于跟踪扩展,是否有任何扩展特定参考?还是我误解了,您提供的链接是否与扩展有关?
  • AnnotationEventHandlerAdapter 确实是一个核心组件,所以我知道你必须走下一个兔子洞才能遵循这个。 AxonIQ 正在计划开发一种形式的开发门户,其中应该包括这样的常见问题解答。而且,问这个问题当然总是一件好事! AxonIQ 在 StackOverflow 和他们自己的用户组上很活跃 -> groups.google.com/forum/#!forum/axonframework
  • 在追踪方面,我可以提供三个主要信息点。首先,GitHub页面:github.com/AxonFramework/extension-tracing。其次,参考指南:docs.axoniq.io/reference-guide/extensions/tracing。最后,介绍跟踪扩展的人写了一篇关于它的博客:blog.trifork.com/2019/03/18/…
  • 我们认为是正确的,但需要进行更多测试。 BraveTracer 没有被创建,所以我们必须手动创建它。
猜你喜欢
  • 2019-06-26
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2022-09-26
  • 1970-01-01
  • 2014-09-14
相关资源
最近更新 更多