在事件存储中找不到聚合

我正在尝试使用 CQRS 框架 AXON 添加数据。但是在点击 API 时(用于添加订单)。我收到以下错误:-


Command 'com.cqrs.order.commands.CreateOrderCommand' resulted in org.axonframework.modelling.command.AggregateNotFoundException(The aggregate was not found in the event store)

但是我的代码中已经有一个聚合(OrderAggregate.Java)。


完整代码可在 - https://github.com/iftekharkhan09/OrderManagementSystem找到


添加订单的 API - http://localhost:8080/confirmOrder


请求正文:-


{

    "studentName":"Sunny Khan"

}

谁能告诉我我在哪里做错了?任何帮助表示赞赏!


慕侠2389804
浏览 207回答 2
2回答

弑天下

对于其他读者,让我分享您在存储库中创建的聚合:@Aggregatepublic class OrderAggregate {    public OrderAggregate(OrderRepositoryData orderRepositoryData) {        this.orderRepositoryData = orderRepositoryData;    }    @AggregateIdentifier    private Integer orderId;    private OrderRepositoryData orderRepositoryData;    @CommandHandler    public void handle(CreateOrderCommand command) {        apply(new OrderCreatedEvent(command.getOrderId()));    }    @EventSourcingHandler    public void on(OrderCreatedEvent event) {        this.orderId=event.getOrderId();        Order order=new Order("Order New");        orderRepositoryData.save(order);    }    protected OrderAggregate() {        // Required by Axon to build a default Aggregate prior to Event Sourcing    }}您可以从该聚合中完全删除几项内容,它们是:这OrderRepositoryData设置的OrderAggregate构造函数OrderRepositoryDataOrder在带@EventSourcingHandler注释的函数中手动保存您在这里所做的是将命令模型对决策的关注与Order为查询模型创建可查询对象相结合。最好从聚合(示例中的命令模型)中完全删除此逻辑并将其移至事件处理组件。然而,这不是AggregateNotFoundException你收到的罪魁祸首。您错过的是使CreateOrderCommand命令处理程序成为构造函数。CreateOrderCommand顾名思义,它将创建一个订单。因此,它应该由构造函数而不是常规方法来处理。所以,而不是这个:  @CommandHandler    public *void* handle(CreateOrderCommand command) {        apply(new OrderCreatedEvent(command.getOrderId()));    }你应该这样做:@CommandHandlerpublic OrderAggregate(CreateOrderCommand command) {    apply(new OrderCreatedEvent(command.getOrderId()));}

当年话下

在事件存储中找不到聚合此异常的主要原因是,当轴突尝试保存聚合时,它应该首先创建聚合。@CommandHandlerpublic OrderAggregate(CreateOrderCommand command) {    apply(new OrderCreatedEvent(command.getOrderId()));}也以这种方式你私有 OrderRepositoryData orderRepositoryData;不会被初始化,所以也自动装配了 orderRepositoryData。@Autowiredprivate OrderRepositoryData orderRepositoryData;对于连续事件,您应该使用相同的OrderId,否则它也会抛出handleThrowable(java.lang.Throwable,org.springframework.web.context.request.WebRequest) org.axonframework.modelling.command.AggregateNotFoundException: 在 org.axonframework.eventsourcing.EventSourcingRepository.doLoadWithLock( EventSourcingRepository.java:122)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java