代码之家  ›  专栏  ›  技术社区  ›  Sunny

在事件存储中找不到聚合

  •  -1
  • Sunny  · 技术社区  · 7 年前

    我正在尝试使用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)
    

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

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

    {
        "studentName":"Sunny Khan"
    }
    

    谁能告诉我哪里做错了? 感谢您的帮助!

    2 回复  |  直到 7 年前
        1
  •  3
  •   Steven    7 年前

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

    @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 带注释的函数

    您在这里所做的是将命令模型的决策关注点与创建可查询项混合在一起 对于查询模型。最好完全从聚合(示例中的命令模型)中删除此逻辑,并将其移动到事件处理组件。

    然而,这并不是这次事件的罪魁祸首 AggregateNotFoundException 你收到了。 你错过的是做一个 CreateOrderCommand 命令处理程序是一个构造函数。

    这个 因此,与此相反:

        @CommandHandler
        public *void* handle(CreateOrderCommand command) {
            apply(new OrderCreatedEvent(command.getOrderId()));
        }
    

    您应该这样做:

    @CommandHandler
    public OrderAggregate(CreateOrderCommand command) {
        apply(new OrderCreatedEvent(command.getOrderId()));
    }
    

    希望这对你有帮助@Sunny!

        2
  •  1
  •   shuaib    5 年前

    在事件存储中找不到聚合

    @CommandHandler
    public OrderAggregate(CreateOrderCommand command) {
        apply(new OrderCreatedEvent(command.getOrderId()));
    }
    

    也就这样,

    私有OrderRepositoryData OrderRepositoryData;

    不会初始化,因此也会自动连接orderRepositoryData。

    @Autowired
    private OrderRepositoryData orderRepositoryData;
    

    医嘱ID

    handleThrowable(java.lang.Throwable,org.springframework.web.context.request.WebRequest)

    推荐文章