Axonframework с Spring Boot: сторона запроса не может получить событие в случае использования репозитория на основе JPA на стороне команды

Я создал проект springaxon с axon-spring-boot-starter для изучения каркаса аксонов. . Он отлично работает, если я использую источник событий на стороне команды. (Фактически, поскольку JPA доступен, а bean-компонент userOrderRepository не объявлен, по умолчанию используется хранилище событий с механизмом хранения событий JPA) Я могу видеть журнал «... получил OrderCreatedEvent ...» со стороны запроса. Ниже приведен связанный исходный код.

UserOrder.java:
@Aggregate
@Entity
public class UserOrder

AxonConfiguration.java:
//Do not declare a repository

Мне нужен репозиторий на основе JPA на стороне команды вместо источника событий, поэтому я аннотировал репозиторий для агрегата и объявил этот репозиторий. Ниже приведен связанный исходный код.

UserOrder.java:
@Aggregate(repository="orderRepository")
@Entity
public class UserOrder

AxonConfiguration.java:
@Bean
@Autowired
public Repository<UserOrder> orderRepository(EntityManagerProvider entityManagerProvider, EventBus eventBus) {
    return new GenericJpaRepository<UserOrder>(entityManagerProvider, UserOrder.class, eventBus);
}  

Но на этот раз я не могу получить журнал «... получил OrderCreatedEvent ...» со стороны запроса.

Понятия не имею, любые предложения приветствуются, спасибо.


person Jack Zhou    schedule 12.09.2017    source источник


Ответы (1)


Настройка типа репозитория, который вы используете для агрегата, не должна влиять на возможности шины событий, просто события сохраняются немного по-другому.

Основная корректировка, которую он сопровождает для событий, заключается в том, что они меняются с DomainEventMessages на регулярный EventMessags внутри. Разница в том, что DomainEventMessages имеет специальное поле агрегата, необходимое для получения вашего агрегата на основе событий. А поскольку вы предпочитаете не использовать агрегат в качестве источника событий, больше нет необходимости использовать эти DomainEventMessages.

Тем не менее, они все равно должны храниться и, таким образом, извлекаться со стороны вашего запроса.

Вы убедились, что ваши события все еще хранятся в хранилище событий? Может быть, вы также настроили свой EventStore на (Simple)EventBus? По умолчанию в Axon при использовании стартовой зависимости Spring Boot используется EmbeddedEventStore, который хранит и отправляет события.

person Steven    schedule 13.09.2017
comment
Спасибо за ответ, Стивен. Да, мои события OrderCreatedEvent по-прежнему хранятся в хранилище событий, а агрегат сохраняется в базе данных JPA, но я не могу получить OrderCreatedEvent на стороне запроса. И я не настраивал какие-либо компоненты по умолчанию (командная шина, шина событий и т. Д.), Я просто объявил orderRepository, он был связан с entityManagerProvider по умолчанию и eventBus с помощью аннотации @Autowired. Если я прокомментирую свое объявление orderRepository, оно будет работать нормально. - person Jack Zhou; 14.09.2017
comment
Первое, что приходит на ум, чтобы еще более точно определить проблему: мне кажется, я видел, что у вас есть два приложения Spring Boot. Один для стороны команды и один для стороны запроса. Верный? Вы пытались поместить свой класс обработки событий из приложения запросов в свое командное приложение? Это просто предложение для попыток, надеюсь, точно определить, в чем проблема. - person Steven; 18.09.2017
comment
Я создал такой же обработчик событий на стороне команды, он тоже не может получать событие. - person Jack Zhou; 21.09.2017
comment
Итак, я сделал несколько тестовых шагов, чтобы создать несколько Axon Labs, где я делаю то, что у вас не работает. Вы можете найти материалы на моей странице GitHub здесь. Он указывает на четвертую ветвь (четвертая лаборатория), поскольку там у меня есть компонент EventHandling, который вызывается, пока я не занимаюсь поиском событий, но настроил GenericJpaRepository. Возможно, этот код подскажет, почему он не работает в вашей системе! - person Steven; 27.09.2017
comment
Спасибо, Стивен, я попробую, как твой проект git. - person Jack Zhou; 19.10.2017
comment
Привет, @JackZhou, помогло ли мое предложение решить проблему? Для всех, кто это читает, было бы полезно, если бы вы могли предложить курс действий, который вы предприняли, или отметить мой вопрос как решение. - person Steven; 17.10.2019
comment
К сожалению, в то время это не сработало, и я не уверен, работает ли он сейчас нормально. В то время я не мог понять этого на той версии аксонного каркаса. - person Jack Zhou; 21.10.2019