Я исследую, как работает репозиторий публикаций событий в Spring Modulith. У меня это работает так, что при сбое прослушивателя событие сохраняется в реестре как незавершенное. Согласно документации, событие должно быть повторно доставлено моему слушателю, когда я перезапускаю приложение, но этого не происходит.
Более того, я хотел бы, чтобы он повторял попытку во время работы приложения, а также использовал его в качестве шаблона транзакционных исходящих сообщений. Как мне это настроить?
Вы можете просмотреть мой тестовый проект по адресу transactional-outbox-spring-modulith .
Обновлено: Кажется, повторная доставка при запуске не по умолчанию, вам нужно установить spring.modulith.republish-outstanding-events-on-restart=true в application.properties, тогда все работает нормально. Однако мой вопрос о том, как выполнять повторные попытки во время работы приложения, остается в силе.




В качестве альтернативы свойству republish-outstanding-events-on-restart есть два bean-компонента Spring, которые можно использовать для взаимодействия с событиями.
IncompleteEventPublications incompleteEvents;
CompletedEventPublications completeEvents;
Они предлагают минимальный API, который позволяет вам получать или повторно отправлять незавершенные события, а также получать или удалять завершенные в зависимости от некоторых временных диапазонов (см. пример).
Наконец, если хотите, вы можете напрямую запросить базу данных (select * from event_publication), но я не уверен, насколько это будет лучше предыдущего решения.
Спасибо, я тоже это нашел в свое время. Я написал подробный пост в блоге по адресу wimdeblauwe.com/blog/2024/06/25/… с дополнительной информацией.