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

时间:2017-12-24 09:56:53

标签: cqrs event-sourcing axon

我跟随Allard(https://github.com/abuijze/bootiful-axon)分享的axon-springboot示例。

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

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

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

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

第二个问题是,当重播被触发并且查询存储更新时,我看不到任何消息被发布到RabbitMQ ...所以我的统计应用程序不同步。我做错了吗?

你能告诉我吗? 谢谢 辛格

1 个答案:

答案 0 :(得分:3)

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

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

要回答您的第二个问题,请先说明重播是如何运作的。虽然它被称为"重播",但基本上它更像是"重置"。跟踪处理器使用TrackingToken来记住其处理事件存储的进度。当令牌被删除(或者尚未可用)时,跟踪处理器从事件存储的开头开始处理。

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

如果您的统计信息已过期,那是因为它们不是同一处理器的一部分,也不会与其他元素一起重建。 RabbitMQ不支持"重播",因为它在交付后不记得这些消息。

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

查看Axon参考指南以获取更多信息:https://docs.axonframework.org/part3/event-processing.html#event-processors