使用TrackingEventProcessor进行事件重放 - Axon 3

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

我正在跟随Allard(qazxsw poi)分享的轴突弹簧启动示例。

到目前为止,我的理解是:(如果我误解了一些概念,请纠正我)

事件被引发并存储在事件存储/事件总线(Mysql)中(使用EmbeddedEventStore)。现在,事件处理器(TrackingProcessors - 在我的情况下)将从源中提取事件(MySql - 对吗?),事件处理程序将执行业务逻辑并更新发布到RabbitMQ的查询存储和消息。

第一个问题是将此消息发布到RabbitMQ的位置,时间和人员(由配置了消息监听器的统计应用程序使用)。

我已将TrackingProcessor配置为尝试重播功能。要执行重放,我停止处理器,删除处理器的令牌条目,启动处理器并重放事件,并按预期更新我的查询存储。

第二个问题是,当重放被触发并且查询存储被更新时,我没有看到任何消息被发布到RabbitMQ ...因此我的统计应用程序不同步。难道我做错了什么?

你能给些建议么?谢谢辛格

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

首先,进行更正:跟踪处理器或视图模型的更新程序将消息发送到RabbitMQ。当事件发布到事件总线时,事件将转发给Rabbit。

第一个问题的答案:消息由SpringAmqpPublisher发布,它直接连接到事件总线,并在发布时将任何已发布的消息转发给RabbitMQ。

要回答你的第二个问题,首先让我们澄清一下重播是如何工作的。虽然它被称为“重播”,但实质上它更像是“重置”。跟踪处理器使用TrackingToken来记住其处理事件存储的进度。当令牌被删除(或者尚未可用)时,跟踪处理器从事件存储的开头开始处理。

您永远不会回复整个应用程序,只需一个(跟踪)处理器。试想一下:你再次向RabbitMQ重新发布所有消息,再次触发其他组件,不知道这些是“旧”消息,再次发送用户确认电子邮件,再次下订单等等。

如果您的统计信息已过期,那是因为它们不属于同一处理器,并且不会与其他元素一起重建。 RabbitMQ不支持“重放”,因为它在发送后不记得消息。

您希望能够重建的任何模型都应由跟踪处理器管理。

有关更多信息,请查看Axon参考指南:https://github.com/abuijze/bootiful-axon

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