什么是处理组(@ProcessingGroup)?
我是 Axon 框架的新手,正在努力了解什么是处理组以及它们的用途。
如果你们能对此进行扩展,将不胜感激。
我正在尝试使用单个数据库(事件存储)在不同主机上运行同一应用程序的 2 个实例。但是,我收到以下错误。第一个主机工作正常,但第二个没有。
我应该为他们分配不同的处理组吗?
org.axonframework.eventhandling.tokenstore.UnableToClaimTokenException: Unable to claim token 'projections[0]'. It is owned by '1@xxxxx-yyyyy-zzzzz'
问候, 卡罗
回答
欢迎!让我来解决您的疑问并尝试帮助您:)
- 什么是加工组?
处理组是对事件处理程序进行分组的一种逻辑方式。您可以使用@ProcessingGroup("processingGroupName")注释在您的事件处理组件上定义它们,或者,如果您不提供名称,则默认值为full.package.name. 请记住,为每个处理组创建了一个跟踪事件处理器。
- 处理组的用途是什么?
如前所述,它与跟踪事件处理器有很大关系。在这种情况下,每个 TEP 声明其跟踪令牌(以避免在不同线程/节点中对同一事件进行多次处理)。您可以在此处深入了解它。
- 你的问题呢?
从共享日志和您的评论中说明您有 2 个实例,这仅意味着一个实例已经声明了该令牌,而另一个实例无法声明它。如果第一个发布它,他们将争先恐后地声称它,这意味着他们中的任何一个都可以做到。有多种方法可以并行处理事件,您可以更好地查看此处和此处的文档。
总而言之,此日志行没有任何问题,我相信您将其视为一个INFO而不是ERROR.
希望能解开你的疑惑。