Предложение MetaData
Джаспера могло бы вас туда привести, но есть более простое решение этой проблемы.
Аксон использует понятие ParameterResolvers
(к сожалению, только очень кратко описанное здесь , но более подробно здесь ) для разрешения таких вещей, как команда / событие / запрос, MetaData
или MetaDataValue
. Тем не менее, вы можете также разрешить платформе порядковый номер, который для агрегированного события равен агрегатной версии. Вы можете сделать это, добавив @SequenceNumber
аннотированный Long
параметр в функцию обработки событий.
Следовательно, вы можете написать обработчик событий следующим образом:
@EventHandler
public void on(YourEvent event, @SequenceNumber Long aggregateVersion) {
// Update the query model And the aggregate version
}
Сказав, что очевидно, для этого потребуется обработать все события из агрегата в компоненте обработки событий, чтобы иметь возможность соответствующим образом обновить версию. К счастью, Axon распознает, если вы обрабатываете родительские классы полезных данных события. Таким образом, если вы определяете иерархию классов событий, обеспечивающая реализацию всех событий из данного агрегата interface MyAggregateEvent
. Таким образом, вы можете написать обработчик событий, подобный этому, чтобы охватить все оставшиеся события только для сводных обновлений версий, которые вас иначе не интересовали бы:
@EventHandler
public void on(MyAggregateEvent event, @SequenceNumber Long aggregateVersion) {
// Update the aggregate version only
}
Надеюсь, это поможет!
PS Я только что заметил, что на странице Обработка событий справочного руководства указана аннотация @SequenceNumber
.