创建聚合会导致 CommandExecutionException:OUT_OF_RANGE:[AXONIQ-2000] 聚合 0 的序列号 0 无效,预期为 1

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

我是 Axon 新手,正在尝试让我的第一个程序与 Quarkus 和 Axon 一起运行。我只想介绍一下 Command、CommandHandler、Aggregate、Event、EventHandler 和 EventSourcingHandler。当我尝试通过 CreateAggregateCommand 和 AggregateCreatedEvent 创建新聚合时,我总是收到以下异常:

AxonServerRemoteCommandHandlingException{message=An exception was thrown by the remote message handling component: OUT_OF_RANGE: [AXONIQ-2000] Invalid sequence number 0 for aggregate 0, expected 1, errorCode='AXONIQ-4002', server='28856@31NP00158'}

我的代码非常简单: 这是我的命令:

public class CreateAggregateCommand {

    @TargetAggregateIdentifier
    private final int id;

    public CreateAggregateCommand(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
}

这是我的汇总:

@AggregateRoot
public class MyAggregate {

    @AggregateIdentifier
    int aggregateId;

    private static Logger logger = LoggerFactory.getLogger(MyAggregate.class);

    @CommandHandler
    @CreationPolicy(AggregateCreationPolicy.CREATE_IF_MISSING)
    public void handle(CreateAggregateCommand createAggregateCommand) {
        logger.info("Enter CommandHandler. AggregateId is: " + aggregateId);
        apply(new AggregateCreatedEvent(createAggregateCommand.getId()));
    }

    @EventSourcingHandler
    public void on (AggregateCreatedEvent event) {
        logger.info("Enter EventsourcingHandler. The event-id: " + event.getId());
        this.aggregateId = event.getId();
    }
}

这是我的活动:

public class AggregateCreatedEvent {

    private final int id;

    public AggregateCreatedEvent(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
}

最后这是我的事件处理程序:

    public class EventHandlers {

    Logger logger = LoggerFactory.getLogger(EventHandlers.class);

    @EventHandler
    public void handleCreateAggregate(AggregateCreatedEvent createAggregateEvent) {
        logger.info("Enter EventHandler");
    }
}

我还尝试将 @CommandHandler 放在构造函数上,具有相同的异常结果。我挣扎了好几个小时,进行了研究,但我没有看到我的错误。

aggregate domain-driven-design cqrs axon
1个回答
0
投票

当给定聚合标识符(在本例中为 0)已经存在一个事件,并且为刚刚创建的聚合创建另一个事件时,会发生此异常。 尝试使用不同的聚合标识符,或者使用常规实例方法来指示 yoh wabt Axon 加载聚合。

另请注意,

int
作为标识符的类型远非理想。通常聚合标识符是 UUID 或 String(以随机 uuid 作为内容)

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