我有一个事件源 AxonFramework 应用程序,它需要(在某些事件发生时/之后)调用外部服务。这些调用需要来自事件更新/生成的预测的数据。
首先,我在同一个处理程序中调用外部服务并创建投影。这确保了数据持久且可用,但无法重播/重建投影,因为不得再次调用外部服务。
由于在同一个处理程序中保存投影和服务调用不再是一种选择,我想出了 3 种可能的解决方案:
这三者都需要权衡。但我更喜欢选项 3。
你会选择哪一个?也许还有第四种选择,我没有想到。
Axon 允许您检查事件是否正在“重播”,或者是否是第一次使用该特定事件调用处理程序。
基本上,您可以将
ReplayStatus
类型的参数添加到事件处理程序中。其上的 isReplay()
方法将指示该事件是否是重播的一部分。
您可以在文档中找到更多相关信息:https://docs.axoniq.io/reference-guide/axon-framework/events/event-processors/streaming#replay-api
最终,最好的方法是将可重播的投影与不可重播的副作用完全分开。如果这不可行,
ReplayStatus
参数可以提供帮助。