Я думаю, что вы спрашиваете, есть ли способ обработки команды и события в одной транзакции?
Если вы используете подписывающий процессор , работающий в той же JVM, событие обрабатывается синхронно, и вся транзакция откатывается в случае исключения в обработчике событий.Здесь дело обстоит не так, потому что у вас есть слабосвязанные отдельные службы, и это хорошо.
Рекомендуется, чтобы агрегат с обработчиком команд располагал всей доступной информацией, чтобы решить, может ли команда быть успешно обработана, и когда событие применяется, это сигнал о том, что это произошло,и другие сервисы (в данном случае это сторона запроса) должны быть проинформированы.Для модуля запросов не рекомендуется отменять это («вы говорите, что это произошло, я говорю, что этого не произошло»).Если в стороне запроса есть ошибка, вы исправляете ее и воспроизводите событие.
Если это действительно ошибка в обработчике событий, о которой должна знать вся система, то это действительно отдельное событие.Вы можете применить такое событие непосредственно к шине событий и уведомить всю систему.Как то так:
@Autowired
private EventBus eventBus;
(...)
CatastrophicFailureEvent failureEvent = new CatastrophicFailureEvent("OH NO!");
eventBus.publish(GenericEventMessage.asEventMessage(failureEvent));