如何允许在我的整个 Axon 应用程序上并行处理事件?

How to allow Parallel Processing of Events on my entire Axon Application?

我正在使用 axon-spring-boot-starter 4.0.3 并尝试让事件的并行处理工作,以便我可以更好地扩展我的应用程序。据我了解,我可以通过将以下内容添加到我的轴突配置中来做到这一点

axon.eventhandling.processors.[name].initialSegmentCount=4

axon.eventhandling.processors.[name].threadCount=2

axon.eventhandling.processors.[name].mode=tracking

现在首先是,这是我唯一需要的补充吗?其次,这是否意味着我需要将此配置添加到每个处理器?由于配置需要处理器名称,或者有没有办法将此配置应用于所有处理器?

编辑:另一个问题,按照 github 上提供的指南,他们提到从 entry_token 中删除处理器。这是否意味着所有事件都会重播?如果是这样,有没有办法 select 重播哪些事件?

如果您想通过 application.properties 文件配置您的跟踪事件处理器 (TEP),那么是的,您必须为您定义的每个 TrackingEventProcessor 实例指定它。

但是,从 Axon Framework 4.1 版开始,您可以使用以下方法注册默认配置:

EventProcessingConfigurer#registerTrackingEventProcessorConfiguration(
        Function<Configuration, TrackingEventProcessorConfiguration>
)

当你使用 Spring 引导时,我建议添加一个 @Autowired void 方法来为你配置默认的 TrackingEventProcessorConfiguration,以分割 TrackingToken每个 TEP 并为每个 TEP 设置多个线程。


这是我的主要答案,但您还有其他几个问题。 那么,让我们也回顾一下它们:

Second, does that mean I need to add this configuration to every Processor?

根据以上内容,您已将事件流从技术上拆分为多个 "Segments"。 这是必需的,因为需要 才能对 TrackingToken 提出要求,并且分割 TEP 类似于分割 TrackingToken.

请注意,此要素拆分了事件流。因此,给定的 TEP 线程 将不再 接收所有事件,而只是事件的一个子集。 根据您想要查询模型的事件集,您需要考虑如何进行这种细分。

Axon Framework 为此使用 SequencingPolicy(默认为 SequentialPerAggregatePolicy),您可以通过 EventProcessingConfigurer 配置它。 This参考指南页面也顺便解释了这个概念。


An additional question, following the guide provided on github, they mention deleting the processor from the entry_token.

仅将您的 TEP 配置为使用多个段不会自动调整您设置的段数。这是因为给定 TEP 的 TrackingToken 将被分成几个令牌,这是您必须正确委托的工作。

多段 运行 的简单方法是删除现有令牌。 这确实会重播您的事件,所以您就在那个轨道上。

请注意,从 Axon 4.1 开始,TEP 实现具有 API 到 split/merge 的跟踪标记(写下 here)。 但是,此 API 要求给定的 TEP 可以声明 所有 个现有的跟踪令牌。 因此,如果您是给定应用程序的 运行 多个实例,则那些 API 调用将需要在它们之间进行委托。 然而,Axon 服务器提供了一个很好的 UI 来委托拆分 and/or 为您设置中的每个 TEP 合并跟踪令牌。