我是 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 放在构造函数上,具有相同的异常结果。我挣扎了好几个小时,进行了研究,但我没有看到我的错误。
当给定聚合标识符(在本例中为 0)已经存在一个事件,并且为刚刚创建的聚合创建另一个事件时,会发生此异常。 尝试使用不同的聚合标识符,或者使用常规实例方法来指示 yoh wabt Axon 加载聚合。
另请注意,
int
作为标识符的类型远非理想。通常聚合标识符是 UUID 或 String(以随机 uuid 作为内容)