Мне просто интересно, почему Аксон неявно создает другой агрегат. Такое поведение вызывает обработку нескольких событий, и я не думаю, что эти издержки ожидаются. Имея эту конечную точку:
@PostMapping("ship")
public void shipOrder(@RequestBody Product product) {
String orderId = UUID.randomUUID().toString();
commandGateway.sendAndWait(new PlaceOrderCommand(orderId, product.getName()));
commandGateway.sendAndWait(new ConfirmOrderCommand(orderId));
}
и следующую совокупность:
@Aggregate
public class Order {
@AggregateIdentifier
private String orderId;
private boolean orderConfirmed;
@CommandHandler
public Order(PlaceOrderCommand command) {
System.out.println("Calling COMMAND constructor");
apply(new OrderPlacedEvent(command.getOrderId(), command.getProduct()));
}
protected Order() {
System.out.println("Calling PARAMLESS constructor");
}
@CommandHandler
public void handle(ConfirmOrderCommand command) {
apply(new OrderConfirmedEvent(command.getOrderId()));
}
@EventSourcingHandler
public void on(OrderPlacedEvent event) {
System.out.println(">>>>>> Handling OrderPlacedEvent: " + this);
this.orderId = event.getOrderId();
orderConfirmed = false;
}
@EventSourcingHandler
public void on(OrderConfirmedEvent event) {
System.out.println(">>>>>> Handling OrderConfirmedEvent: " + this);
orderConfirmed = true;
}
}
После вызова конечной точки, как только я получаю этот журнал:
Calling COMMAND constructor
>>>>>> Handling OrderPlacedEvent: Order@3eecb9e2
Calling PARAMLESS constructor
>>>>>> Handling OrderPlacedEvent: Order@cd10277
>>>>>> Handling OrderConfirmedEvent: Order@cd10277
Как вы можете видеть OrderPlacedEvent вызывается дважды вместе с конструктором без параметров. Кто-нибудь знает, почему я испытываю следующее поведение?