首页 > 解决方案 > 在 Axon 中按顺序处理两个事件

问题描述

我可以在轴突中顺序处理的两个事件之间(或以一定的时间间隔执行)放置一个序列吗?这两个事件是同时创建的。以下是示例事件。

因为我的第二个事件取决于第一个事件的执行结果。我正在使用 RabbitMq 发布消息。

@EventHandler
public void handleEvent1(Event1 event) {
    LOG.debug("An event of type {}, occured.", event.getClass().getName());
 }

@EventHandler
public void handleEvent2(Event2 event) {
    LOG.debug("An event of type {}, occured.", event.getClass().getName());
 }

标签: rabbitmqaxon

解决方案


您介意详细说明您需要它的用例吗?我已经为您的问题准备好了答案,但也许我可以根据您需要的情况提出不同的行动方案。

事件将按照它们被提供给您使用的消息源的顺序进行处理。

EventStore,这意味着您将按照每个事件的全局索引顺序接收事件。globalIndex是每个字段上的一个字段,用于EventMessage表示它在整个事件存储中的顺序。

当使用 AMQP/RabbitMQ 作为消息源时,类似的排序成立。队列中较早的事件将首先在消费端处理。

如果您因此希望Event1在 之前被处理Event2,那么它需要在另一个之前发布。因此,如果您需要有保证的顺序,那么控制发布顺序是关键。Axon 不提供句柄来调整事件的处理顺序,因为如果您的系统不直接依赖事件顺序,它会更加理想。处理组件应该独立存在,而不是对此事做出假设。

希望这可以帮助您解决阿米特!


推荐阅读