IGNITE
IgniteAggregationRepository сделан на основе JdbsAggregationRepository документация https://help.talend.com/reader/Uc2IlRuFVfGrjaFPdRI7kA/fBdqK2kf6iIkLHQf9nLh6g
Есть некоторые внутренние баги karaf, которые не позволяют установить некоторые Ignite фичи в karaf: https://github.com/apache/ignite/blob/fd921a233d35408883695419b6f9979ac674d1b9/modules/osgi-karaf/src/main/resources/features.xml#L87
В карафе поднимается Ignite, с рабочей директорией, прописанной в ru.entaxy.esb.ignite.cfg, в параметре ignite.work.directory.path.
Это место, где Ignite создает для себя все, что нужно, и будет хранить данные.
Ignite настроен с сохранением персисетнтности данных (сохранением их на диск) и созданием реплицации (бэкапов) на других узлах кластера.
При потере одной ноды, другие восстановят данные, которе хранились на текущем узле.
IGNITE_QUIET=false - параметр необходимый для того, чтобы Ignite не писал информацию о себе в лог, для того что бы параметр применился, необходимо выставить setGridLogger, смогла установить в караф только JclLogger.
AggregationProcessor
AggregationProcessor стандартный, не рассчитан на работу в кластере из-за чего пришлось вытаскивать исходники и редактировать сам процессор.
(AggregationProcessorWithRestoreTimeout)
Так как теперь AggregationProcessor вызывается как bean, а не как стандартный камеловский процессор, то процесс старта и остановки происходит в отличном порядке.
Для работы в кластере:
-
добавлен механизм восстановления работы таймаутов на других нодах
-
отредактирован механизм удаления сообщения из репозитория (возникало состояние гонки и появлялись дубликаты)
-
исправлен механизм продолжения работы с "застрявшими" сообщениями (recoverTask из таблицы _completed)
-
добавлен безопасный механизм забора сообщений из очереди (восстановление сообщения в очереди, если не пришло подтверждение)