Я думаю, что могу помочь вам в этом сценарии.Позвольте мне сначала дать вам небольшую предысторию о том, почему ваше «хранилище модели запросов», private final Map<String, Webshop>
, не заполняется при каждом запуске.
Технический механизм, который предоставляет события для вашего @EventHandler
аннотированногофункции, называется обработчик событий .Начиная с версии 4.0 Axon Framework по умолчанию имеет значение TrackingEventProcessor
.
TrackingEventProcessor
, как следует из названия, отслеживает собственную обработку событий.Это достигается сохранением TrackingToken
- в ваших настройках это означает, что оно будет сохранено в файле базы данных H2.В этом TrackingToken
хранится (среди прочего) последнее событие, обработанное данным * 1013. *
TrackingToken
- это то, что позволяет вам воспроизводить события, так как вы можете указать его на другой момент временив потоке событий.Регулировка положения токена, таким образом, является ключевой в этом сценарии.
Вы можете сделать это, запустив воспроизведение на TrackingEventProcessor
, что более подробно объясняется здесь .Однако, поскольку вы просто показываете, как это работает, а не создаете постоянную систему, я бы предложил что-то более прагматичное.
Если вы установите TokenStore
(компонент, отвечающий за хранение ваших токенов) на InMemoryTokenStore
, вы будете застрахованы, ваше приложение не будет отслеживать ход обработки событий отслеживания между отключениямиваше приложение.Для этого вы можете сделать следующее в файле конфигурации или в аннотированном классе @SpringBootApplication
(при условии, что вы используете Spring Boot):
@Autowired
public void configureInMemoryTokenStore(EventProcessingConfigurer configurer) {
configurer.registerTokenStore(configuration -> new InMemoryTokenStore());
}
Надеюсь, это поможет!