Реализация моментального снимка axon с помощью springboot 2.3.3 и axon 4.4.2

#spring-boot #axon

#весенняя загрузка #axon

Вопрос:

кто-нибудь может предложить какой-либо учебник / пример проекта для реализации моментального снимка в AXON 4.4.2 с помощью SpringBoot 2.3.3.

я просмотрел документацию (https://docs.axoniq.io/reference-guide/axon-framework/tuning/event-snapshots#snapshotting ) и сделал следующее: AxonConfig.class

 @Configuration
public class AxonConfig {

    @Bean
    public SnapshotTriggerDefinition app1SnapshotTrigger(Snapshotter snapshotter) {
        return new EventCountSnapshotTriggerDefinition(snapshotter, 10);
    }
}
  

Совокупный

 @Aggregate(snapshotTriggerDefinition = "app1SnapshotTrigger")
public class MyAggregate {

    @AggregateIdentifier
    private String id;
    private String name;
    @AggregateMember
    private List<Address> addresses = new ArrayList<>();

    private  MyAggregate  () {

    }

    @CommandHandler
    private  MyAggregate  (CreateNameCommand createNameCommand) {
        -----
    }

    @EventSourcingHandler
    private void on(NameCreatedEvent nameCreatedEvent) {
       ----
    } 
  

Я что-то упускаю. Создаст ли он моментальный снимок при пороговом значении 10.
Спасибо.

Комментарии:

1. Привет, Рохит, с какой проблемой ты столкнулся? Конфигурация кажется прекрасной.

Ответ №1:

к сожалению, у нас нет готового демонстрационного примера для показа в этом случае.

Из вашего фрагмента кода видно, что все на месте. Возможно, есть какая-то другая конфигурация, которая использует вашу аннотацию.

Чтобы попробовать, я применил вашу конфигурацию к нашемуhttps://github.com/AxonIQ/giftcard-demo /

Первое замечание, которое может послужить руководством, заключается в следующем

Вместо этого здесь фрагмент кода, чтобы настроить это как компонент

 @Bean
public Repository<GiftCard> giftCardRepository(EventStore eventStore, SnapshotTriggerDefinition giftCardSnapshotTrigger) {
    return EventSourcingRepository.builder(GiftCard.class)
            .snapshotTriggerDefinition(giftCardSnapshotTrigger)
            .eventStore(eventStore)
            .build();
}

@Bean
public SpringAggregateSnapshotterFactoryBean snapshotter() {
    var springAggregateSnapshotterFactoryBean = new SpringAggregateSnapshotterFactoryBean();
    //Setting async executors
    springAggregateSnapshotterFactoryBean.setExecutor(Executors.newSingleThreadExecutor());
    return springAggregateSnapshotterFactoryBean;
}

@Bean("giftCardSnapshotTrigger")
public SnapshotTriggerDefinition giftCardSnapshotTriggerDefinition(Snapshotter snapshotter) {
    return new EventCountSnapshotTriggerDefinition(snapshotter, 10);
}
  

Вы можете проверить, что ваш моментальный снимок работает нормально, просматривая журнал клиента: после 10 событий с тем же идентификатором agggregate вы должны найти эту запись в журнале info
o.a.a.c.event.axon.AxonServerEventStore : Snapshot created

Для проверки вы можете использовать REST api для извлечения событий из агрегата curl -X GET "http://localhost:8024/v1/events?aggregateId=A01" Это создаст поток, содержащий события, начиная с последнего моментального снимка: у вас будет девять событий, перечисленных до тех пор, пока не будет обработано десятое событие. После этого конечная точка перечислит события из моментального снимка.

Вы также можете проверить /actuator/health конечную точку: она будет отображать маркер последнего снимка, если showDetails включен (включен по умолчанию в EE, не включен по умолчанию в SE).

Corrado.