Воспроизведение событий с использованием TrackingEventProcessor - Axon 3

Я следую примеру Axon-Springboot, представленному Аллардом (https://github.com/abuijze/bootiful-axon).

На данный момент я понимаю: (пожалуйста, поправьте меня, если я неправильно понял некоторые концепции)

События возникают и сохраняются в хранилище событий / шине событий (Mysql) (с использованием EmbeddedEventStore). Теперь обработчики событий (TrackingProcessors - в моем случае) будут извлекать события из источника (MySql - верно?), А обработчики событий будут выполнять бизнес-логику и обновлять хранилище запросов и сообщения, опубликованные в RabbitMQ.

Первый вопрос: где, когда и кто публикует это сообщение в RabbitMQ (используется статистическим приложением, в котором настроен прослушиватель сообщений).

Я настроил TrackingProcessor, чтобы попробовать функцию воспроизведения. Чтобы выполнить воспроизведение, я останавливаю свой процессор, удаляю запись токена для процессора, запускаю процессор, и события воспроизводятся, и мое хранилище запросов обновлено, как и ожидалось.

Второй вопрос: когда запускается воспроизведение и обновляется хранилище запросов, я не вижу сообщений, публикуемых в RabbitMQ ... поэтому мое статистическое приложение не синхронизировано. Я делаю что-то неправильно?

Вы могли бы посоветовать? Спасибо Сингх


person JP Singh    schedule 24.12.2017    source источник


Ответы (1)


Прежде всего, исправление: это не процессор отслеживания или средство обновления модели представления, которое отправляет сообщения в RabbitMQ. События пересылаются Rabbit по мере их публикации в шине событий.

Ответ на ваш первый вопрос: сообщения публикуются SpringAmqpPublisher, который подключается непосредственно к шине событий и пересылает любое опубликованное сообщение в RabbitMQ по мере их публикации.

Чтобы ответить на ваш второй вопрос, давайте сначала проясним, как работают повторы. Хотя это называется «повтором», по сути, это скорее «сброс». Процессор отслеживания использует TrackingToken для запоминания процесса обработки хранилища событий. Когда токен удален (или просто еще не доступен), процессор отслеживания начинает обработку с начала хранилища событий.

Вы никогда не отвечаете на все приложение, а только на один (отслеживающий) процессор. Только представьте: вы снова публикуете все сообщения в RabbitMQ, другие компоненты запускаются снова, не зная о том, что это «старые» сообщения, и снова отправляются электронные письма с подтверждением пользователя, снова размещаются заказы и т. Д. И т. Д.

Если ваша статистика устарела, это потому, что они не являются частью одного процессора и не перестраиваются вместе с другим элементом. RabbitMQ не поддерживает «воспроизведение», поскольку не запоминает сообщения после их доставки.

Любая модель, которую вы хотите восстановить, должна управляться процессором отслеживания.

Дополнительную информацию см. В Справочном руководстве Axon: https://docs.axonframework.org/part3/event-processing.html#event-processors

person Allard    schedule 25.12.2017
comment
Можете ли вы предложить образец кода для восстановления устаревшей модели. Большинство разработчиков, которых я знаю, задают этот вопрос разными способами - person wthamira; 03.04.2018