Статьи

Реализация динамических сервисов на основе ресурсов в Java с арендатором

Вступление

Rоресурс — это среда с открытыми ресурсами для разработки динамических сервисов и компонентов на основе Java, в которой бизнес-логика основана на данных некоторых ресурсов. Ресурс может быть любым — файлом в локальной файловой системе, конфигурацией YAML из репозитория GitHub и т. Д.

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


Вам также могут понравиться:
Динамические, Модульные Микросервисы с Java EE

Основная идея Reror состоит в том, чтобы скрыть всю сложность, связанную с работой с источниками данных, анализом контента и динамической перезагрузкой. Он предоставляет декларативный API, с помощью которого вы определяете сервисы один раз и используете их для всей среды выполнения приложения.

Как это работает

Арендатор генерирует специальный прокси-класс, который наследует тип вашего сервиса. Под этим прокси-сервером делегируются все вызовы методов для самого современного экземпляра вашей службы / компонента. Чтобы создать его, он загружает данные из предоставленного источника, анализирует их с помощью переводчиков и вызывает метод конструктора / фабрики вашего класса.

Арендодатель предоставляет декларативный  API , реализующий самые популярные источники и форматы файлов. Во время создания службы вы должны определить источник, ресурс и переводчик. Таким образом, после создания сервиса вы можете подписаться на дальнейшие изменения ресурса. Управление версиями также поддерживается с использованием различных  стратегий перезагрузки , в зависимости от типа источника данных. Это позволяет перезагрузить только те данные, которые были фактически изменены, сохраняя пропускную способность сети / диска и ресурсы ЦП.

Этот подход лучше всего подходит для платформ IoC / DI, таких как Spring, где вы регистрируете компоненты только один раз во время запуска контекста. Вы можете безопасно сделать это с помощью услуг Арендатора. В этом случае Арендатор неявно удостоверится, что они всегда обновлены.

Пример переключения динамической функции

Определение сервиса

Предположим, вы собираетесь внедрить чрезвычайно простую службу Feature Toggle для своего приложения. Он будет настроен с использованием простого файла YAML, хранящегося в репозитории GitHub. Всякий раз, когда состояние переключения функции изменяется с помощью фиксации в этом хранилище, ваше приложение должно включать / отключать данную функцию во время выполнения. Ниже приводится модель данных:


Джава