#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 /
Первое замечание, которое может послужить руководством, заключается в следующем
- если вы объявили репозиторий, как мы сделали в https://github.com/AxonIQ/giftcard-demo/blob/master/src/main/java/io/axoniq/demo/giftcard/command/GcCommandConfiguration.java#L17 эта конфигурация заменит аннотации, размещенные в вашем aggregate. Если вы предпочитаете аннотацию, вы можете удалить это определение компонента.
Вместо этого здесь фрагмент кода, чтобы настроить это как компонент
@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.