我正在尝试使用 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)
Run Code Online (Sandbox Code Playgroud)
但我的代码中已经有一个聚合(OrderAggregate.Java)。
完整代码可以在 - https://github.com/iftekharkhan09/OrderManagementSystem找到
添加订单的 API - http://localhost:8080/confirmOrder
请求正文:-
{
"studentName":"Sunny Khan"
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我哪里做错了?任何帮助表示赞赏!
对于其他读者,让我分享您在存储库中创建的聚合:
@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
}
}
Run Code Online (Sandbox Code Playgroud)
您可以从该聚合中完全删除一些内容,它们是:
OrderRepositoryDataOrderAggregate设置的构造函数OrderRepositoryDataOrder在@EventSourcingHandler注释函数中手动保存 an您在这里所做的是将命令模型的决策关注点与Order为查询模型创建可查询对象混合在一起。最好从聚合(示例中的命令模型)中完全删除此逻辑并将其移至事件处理组件。
AggregateNotFoundException然而,这并不是您收到的问题的罪魁祸首。您错过的是使CreateOrderCommand命令处理程序成为构造函数。
CreateOrderCommand正如其名称所暗示的,这将创建一个订单。因此,它应该由构造函数而不是常规方法来处理。所以,而不是这个:
@CommandHandler
public *void* handle(CreateOrderCommand command) {
apply(new OrderCreatedEvent(command.getOrderId()));
}
Run Code Online (Sandbox Code Playgroud)
你应该这样做:
@CommandHandler
public OrderAggregate(CreateOrderCommand command) {
apply(new OrderCreatedEvent(command.getOrderId()));
}
Run Code Online (Sandbox Code Playgroud)
希望这对你有帮助@Sunny!
| 归档时间: |
|
| 查看次数: |
6818 次 |
| 最近记录: |