У меня есть сага, которая создает команду, которая создает агрегат Item.
Мне нужно выполнить некоторые другие logi c после создания агрегатов, поэтому у меня есть обработчик для работы с ItemCreatedEvent .
Кажется, что logi c ItemEventsHandler не выполняется при блокировке экземпляра Saga. Итак, я получаю другое событие, связанное с сагой, выполняющейся одновременно с обработчиком.
Есть ли способ заставить обработчик быть частью обработки / выполнения одного и того же экземпляра саги? Я что-то упустил?
Использование axon 4.3.3 с пружинным чехлом.
@Saga
public class OrderSaga {
@Inject
private transient CommandGateway commandGateway;
@StartSaga
@SagaEventHandler(associationProperty = "executionId")
public void handle(OrderCreatedEvent event) {
event.items.forEach(item -> {
// Associate to Saga
SagaLifecycle.associateWith("itemId", item.id);
commandGateway.sendAndWait(new CreateItemCommand(event.groupId, event.schemaId, item));
});
}
}
@Aggregate
public class ItemAggregate {
@AggregateIdentifier
private String id;
private String groupId;
...
@CommandHandler
public ItemAggregate on(CreateItemCommand command) {
AggregateLifecycle.apply(new ItemCreatedEvent(
command.id,
command.groupId,
...));
}
@EventSourcingHandler
protected void on(ItemCreatedEvent event) {
this.id = event.id;
this.groupId = event.groupId;
...
}
}
@Service
public class ItemEventsHandler {
@EventHandler
protected void on(ItemCreatedEvent event) {
// This needs to be executed under the Saga locking
}
}