为了账号安全,请及时绑定邮箱和手机立即绑定

在事件存储中找不到聚合

在事件存储中找不到聚合

慕侠2389804 2022-06-04 15:06:13
我正在尝试使用 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"}谁能告诉我我在哪里做错了?任何帮助表示赞赏!
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

对于其他读者,让我分享您在存储库中创建的聚合:


@Aggregate

public 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

    }


}

您可以从该聚合中完全删除几项内容,它们是:

  1. OrderRepositoryData

  2. 设置的OrderAggregate构造函数OrderRepositoryData

  3. Order在带@EventSourcingHandler注释的函数中手动保存

您在这里所做的是将命令模型对决策的关注与Order为查询模型创建可查询对象相结合。最好从聚合(示例中的命令模型)中完全删除此逻辑并将其移至事件处理组件。

然而,这不是AggregateNotFoundException你收到的罪魁祸首。您错过的是使CreateOrderCommand命令处理程序成为构造函数。

CreateOrderCommand顾名思义,它将创建一个订单。因此,它应该由构造函数而不是常规方法来处理。所以,而不是这个:

  @CommandHandler

    public *void* handle(CreateOrderCommand command) {

        apply(new OrderCreatedEvent(command.getOrderId()));

    }

你应该这样做:


@CommandHandler

public OrderAggregate(CreateOrderCommand command) {

    apply(new OrderCreatedEvent(command.getOrderId()));

}


查看完整回答
反对 回复 2022-06-04
?
当年话下

TA贡献1890条经验 获得超9个赞

在事件存储中找不到聚合


此异常的主要原因是,当轴突尝试保存聚合时,它应该首先创建聚合。


@CommandHandler

public OrderAggregate(CreateOrderCommand command) {

    apply(new OrderCreatedEvent(command.getOrderId()));

}

也以这种方式你


私有 OrderRepositoryData orderRepositoryData;


不会被初始化,所以也自动装配了 orderRepositoryData。


@Autowired

private 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)


查看完整回答
反对 回复 2022-06-04
  • 2 回答
  • 0 关注
  • 206 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信