Установите определенный порядок обработки AXON @ EventHandler's

У меня есть два Axon @ EventHandler, которые нужно обрабатывать в определенном порядке (у них есть РАЗНЫЕ события для обработки). Я прочитал, что мне нужно:

  1. аннотировать все задействованные обработчики событий с помощью org.axonframework.config.ProcessingGroup (порядок, кажется, применим только в пределах одной processingGroup); аннотация делается на уровне класса,
  2. используйте org.springframework.core.annotation.Order для определения приоритета; аннотация делается также на уровне класса

Но даже с этой аннотацией события обрабатываются в том порядке, в котором они были инициированы. Или этот функционал применим только для однотипных событий? Псевдокод будет выглядеть так:

@Component
@RequiredArgsConstructor
@ProcessingGroup("mytest")
@Order(2)
public class Test2RecordProjection {

    @EventHandler
    public void on(Test2CreatedEvent evt) {
    ...
    }
}

@Component
@RequiredArgsConstructor
@ProcessingGroup("mytest")
@Order(1)
public class Test1RecordProjection {

    @EventHandler
    public void on(Test1CreatedEvent evt) {
    ...
    }
}

Axon 4.0


person bluesony    schedule 14.02.2019    source источник


Ответы (1)


Но даже с этой аннотацией события обрабатываются в том порядке, в котором они были инициированы.

Это полностью соответствует ожиданиям. Компоненты обработки событий будут получать события в том порядке, в котором они были сохранены в EventStore.

Единственное, что вы можете сделать с аннотацией @Order, - это установить порядок, в котором вызываются компоненты обработки событий в данной группе обработки.

Таким образом, аннотация, скорее всего, выполняет свою работу, сначала предоставляя события вашему Test1RecordProjection, и только после того, как она увидит, что не может обработать данное событие, она перейдет к Test2RecordProjection.

Однако этот процесс не меняет порядок обработки событий, а только то, в каком порядке будут вызываться компоненты обработки событий в группе обработки.

person Steven    schedule 15.02.2019
comment
Я действительно не недооцениваю разницу между этими двумя: в каком порядке будут обрабатываться события, только в каком порядке будут вызываться компоненты обработки событий в группе обработки - person bluesony; 15.02.2019
comment
Техническим аспектом Axon, обработчиком событий, будет устройство, которое получает или извлекает события из хранилища событий. Эти события происходят в определенном порядке. Единственное, что вы можете сделать с аннотацией @Order, - это изменить порядок вызова класса с @EventHandler аннотированными функциями, а не саму функцию. - person Steven; 18.02.2019