Решение, которое вы разместили, определенно подойдет.
Позвольте мне объяснить сценарий, который вы здесь применили, но и для других людей.
В приложении Axon Framework 4.x любой компонент обработки событий, а значит и ваши экземпляры Saga, поддерживаются TrackingEventProcessor
.
Процессор отслеживания событий «отслеживает», в какой точке потока событий он обрабатывает события. Он сохраняет эту информацию через TrackingToken
, для которого TokenStore
является делегирующей частью работы.
Однако, если вы не указали TokenStore
, у вас будет в памяти TrackingTokens
для каждого обработчика событий отслеживания.
Это означает, что при перезапуске ваш процессор отслеживания событий думает: «О, я еще не занимался обработкой событий, позвольте мне начать с начала времени».
В связи с этим ваши экземпляры Saga каждый раз будут запускать новые, пытаясь воссоздать данный экземпляр Aggregate.
Впредь, указав TokenStore
, как вы решили проблему, с которой столкнулись.
Обратите внимание, что в среде Spring Boor, например, при наличии стартера Spring Data, Axon автоматически создаст для вас JpaTokenStore
.