如何处理依赖的EventHandler?

问题描述 投票:0回答:1

我有一个事件源 AxonFramework 应用程序,它需要(在某些事件发生时/之后)调用外部服务。这些调用需要来自事件更新/生成的预测的数据。

首先,我在同一个处理程序中调用外部服务并创建投影。这确保了数据持久且可用,但无法重播/重建投影,因为不得再次调用外部服务。

由于在同一个处理程序中保存投影和服务调用不再是一种选择,我想出了 3 种可能的解决方案:

  1. 在服务调用之前添加某种检查,如果数据丢失,将重试。重试已内置于其中。
  2. 始终将事件中的数据与投影的当前状态合并,以确保我们始终使用最新的数据。
  3. 在投影事件处理程序中发出命令,这需要服务调用。命令处理程序将检查是否需要调用服务(例如标志),并且仅在需要时发出特定事件。然后,事件处理程序将通过服务调用来处理该事件。

这三者都需要权衡。但我更喜欢选项 3。

你会选择哪一个?也许还有第四种选择,我没有想到。

cqrs event-sourcing axon
1个回答
0
投票

Axon 允许您检查事件是否正在“重播”,或者是否是第一次使用该特定事件调用处理程序。

基本上,您可以将

ReplayStatus
类型的参数添加到事件处理程序中。其上的
isReplay()
方法将指示该事件是否是重播的一部分。

您可以在文档中找到更多相关信息:https://docs.axoniq.io/reference-guide/axon-framework/events/event-processors/streaming#replay-api

最终,最好的方法是将可重播的投影与不可重播的副作用完全分开。如果这不可行,

ReplayStatus
参数可以提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.