我有两个独立的Spring-Boot微服务,一个是命令端,另一个是查询端,命令服务将事件存储在Mongodb中,将事件放到RabbitMQ中,然后查询端订阅队列并建立查询模型。现在如何在Axon中实现事件重放和建立查询模型?是否有可能两个服务在不同的节点上独立运行。如果不可能,那么我应该遵循什么来实现这一点。
如果选择使用RabbitMQ分发事件,则必须使用Axon订阅事件处理器
subscribableMessageSource作为source-https://docs.axoniq.io/reference-guide/extensions/spring-amqp#reading-events-from-an-amqp-queue
只有跟踪事件处理器
支持重播事件-https://docs.axoniq.io/reference-guide/configuring-infrastructure-components/event-processings/event-processors#replay-events
考虑使用Axon服务器或Kafka来分发事件。它们支持跟踪处理器(以及自动回复选项)。
你可以在这里找到一些例子:
Axon服务器:https://github.com/idugalic/digital-restaurant/blob/master/drestaurant-apps/drestaurant-microservices-rest-2/drestaurant-microservices-rest-2-query/src/main/kotlin/com/drestaurant/query/handler/restauranthandler.kt
最好,伊万
我可以在Axon中顺序处理的两个事件之间放置一个序列(或以一定的时间间隔执行)。这两个事件同时创建。下面是示例事件。 因为我的第二个事件取决于第一个事件的执行结果。我正在使用RabbitMq发布消息。
我在用轴突事件跟踪处理器。有时事件需要10秒才能处理。 这似乎导致消息再次被处理,并出现在日志“释放令牌X/0的声明失败。它由另一个节点拥有”中。 如果我增加段数,它不会记录此事件,但事件仍被处理两次,所以我认为这可能会引起误解。 (我想我搞错了) 我已经尝试调整fetchDelay、cleanupDelay和TokenClaimInterval。没有一个解决了这个问题。我是不是缺了什么东西? 编
如果用户的注册事件失败,即使命令成功,我们希望为特定的事件处理程序重新运行特定的事件。 我们考虑使用跟踪事件处理器,但这似乎是从一个特定的时间点重播一组事件。然而,在我们的例子中,如果昨天有100个事件,我们只想在中间重新运行一个特定的事件。 目前,我们正在迁移到Axon,因此决定主要使用SubscriptionEventProcessors,因为它更同步(即错误在命令处理程序中传播)。我们确实了
这里是我的application.yml的相关部分 从文档中,我发现应该创建一个SpringAMQPMessageSource bean: 如果我从rabbitmq管理面板向队列发送消息,我会看到日志: SpringAMQPMessageSource的JavaDoc是这样说的: 但到现在我都找不到在哪里注册,也找不到怎么注册。 配置中的Axon.EventHandling条目和聚合中的@Proce
当我切换到XStream作为事件序列化器时,一切都很好。不执行额外的偶数实例,在命令处理程序中创建的事件与在EventHandler中处理的事件相同。 这是怎么回事?