是否可以使用 Axon 3 通过 RabbitMQ 重播事件
Is that possible to replay events via RabbitMQ with Axon 3
我有一个使用 Axon 3 框架构建的应用程序。
- 有 2 个实例 (jvm)
- 第一个处理命令,通知第二个用RabbitMQ构建读模型数据库
- 此应用程序有事件存储(MongoDB)
现在我想构建第三个实例,是否可以通过 RabbitMQ 重放第一个实例的所有历史事件来构建第三个实例的初始状态?以及如何配置它?
我尝试了 the doc Axons 的答案,似乎我应该使用 TrackingEventProcessor
而不是默认的 SubscribingEventProcessor
,但它不允许与 SpringAMQPMessageSource 一起使用(在文档)
Axon 有两种模式:跟踪和订阅。根据事件的来源,您可以选择其中一种样式,有时也可以同时选择两种样式。
AMQP 是消息代理的规范。传递消息后,会将其从放置它的队列中删除。因此,从概念上讲,不可能重播这些事件,因为它们不再存在于代理中。
如果重播很重要,请确保使用存储消息的消息传递机制。在 Axon 中,EventStore 正是这样做的。目前,Axon 只有 EmbeddedEventStore,但您可以在接收节点中有一个事件存储指向与发送节点相同的数据库。
目前,在 AxonIQ,我们正在开发一个事件存储服务器,它以更干净的方式处理这个问题(不需要在实例之间共享数据源)。
我有一个使用 Axon 3 框架构建的应用程序。
- 有 2 个实例 (jvm)
- 第一个处理命令,通知第二个用RabbitMQ构建读模型数据库
- 此应用程序有事件存储(MongoDB)
现在我想构建第三个实例,是否可以通过 RabbitMQ 重放第一个实例的所有历史事件来构建第三个实例的初始状态?以及如何配置它?
我尝试了 the doc Axons 的答案,似乎我应该使用 TrackingEventProcessor
而不是默认的 SubscribingEventProcessor
,但它不允许与 SpringAMQPMessageSource 一起使用(在文档)
Axon 有两种模式:跟踪和订阅。根据事件的来源,您可以选择其中一种样式,有时也可以同时选择两种样式。
AMQP 是消息代理的规范。传递消息后,会将其从放置它的队列中删除。因此,从概念上讲,不可能重播这些事件,因为它们不再存在于代理中。
如果重播很重要,请确保使用存储消息的消息传递机制。在 Axon 中,EventStore 正是这样做的。目前,Axon 只有 EmbeddedEventStore,但您可以在接收节点中有一个事件存储指向与发送节点相同的数据库。
目前,在 AxonIQ,我们正在开发一个事件存储服务器,它以更干净的方式处理这个问题(不需要在实例之间共享数据源)。