Перейти к содержимому

Redb 4.0: Xml-маршруты, ленивые ссылки, уникальные ключи и ws-trust

redb 4.0: XML-маршруты, ленивые ссылки, уникальные ключи и WS-Trust в одном мажоре

Выпуск redb 4.0 стал общим обновлением для всей экосистемы. Одновременно получили новые версии хранилище redb.Core, интеграционный движок redb.Route, кластерный рантайм redb.Tsak и сервер идентификации redb.Identity. В релиз вошли 76 пакетов NuGet против 66 в ветке 3.7, семь контейнерных образов для GHCR, а также архивы для Windows и Linux.

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

redb.Route: маршруты теперь можно описывать в XML

Главное нововведение интеграционного движка - декларативные маршруты в файлах `.route.xml`. XML-документ разбирается полностью во время загрузки, а ошибки собираются в единый список. Это позволяет сразу увидеть неизвестный элемент, некорректное выражение или незарегистрированную схему эндпоинта, не дожидаясь проблем во время обработки сообщений.

XML-маршруты используют тот же fluent DSL, что и конфигурация на C#. XSD формируется из реестра элементов, а `context.xml` описывает компоненты и объекты контекста. Дополнительно появился генератор, способный преобразовать XML обратно в C#-код. Хранилище redb доступно прямо из разметки через элементы `` и ``.

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

Новые компоненты и единый язык выражений

В redb.Route добавлены реализации распространённых Enterprise Integration Patterns: Wire Tap, Content-Based Router, Splitter, Aggregator, Content Enricher, Claim Check и Idempotent Receiver. Названия и логика соответствуют общепринятому каталогу шаблонов интеграции, поэтому разработчикам, знакомым с Apache Camel или WSO2 Micro Integrator, будет проще ориентироваться в DSL.

В состав релиза вошли отдельные пакеты для CSV, Protobuf, Avro и YAML. Также доступны кодеки Base64, GZip и Zip. Для Protobuf и Avro предусмотрена совместимость с обрамлением Confluent. Пакет JsonTransform выполняет преобразование JSON в JSON с помощью JSONata и нативного .NET-движка.

Появился встроенный кэш с двумя вариантами использования: область `Cache(key, ttl)...EndCache()` и компонент `cache:`. Хранилищем может быть память процесса или любой провайдер `IDistributedCache`.

Для XML-сценариев добавлен XPath 2.0. Он поддерживает регулярные выражения, последовательности, конструкции `if`, `for`, `some` и `every`, закрывая ряд задач, которые невозможно решить средствами XPath 1.0.

Условия, значения и выражения вида `${...}` теперь обрабатываются одной грамматикой и единым компилятором. Некорректное выражение приводит к ошибке на этапе `Start()`, а не превращается в незаметную константу уже при обработке реального трафика. В языке появились функции `stats(target, metric)`, `format(value, pattern, culture)`, `uuid()` и оператор `%`.

Отдельного внимания заслуживает компонент `bean:`. Пользовательский код можно подключать как обычный эндпоинт: объект берётся из реестра контекста либо создаётся через DI-конструктор, а параметры URI связываются с его свойствами.

TestKit и шаблоны сообщений

Для тестирования маршрутов больше не нужны брокеры и изменения в производственном коде. TestKit поддерживает `AdviceRoute` с `ReplaceFrom`, подмену адресов через `MockEndpoints("kafka://*")`, ожидания и сценарные ответы `MockEndpoint`, а также `NotifyBuilder`. Фреймворк тестирования не привязан к конкретной библиотеке, что упрощает включение проверок в существующий проект.

В redb.Route.Templates тело сообщения можно формировать с помощью Scriban или Liquid. Тип результата определяет экранирование подставляемых значений. Шаблон компилируется при запуске маршрута, а песочница блокирует вызов произвольных методов.

redb.Core: ленивые ссылки и уникальные ключи

В базовом хранилище появились ленивые ссылки. Они позволяют не загружать связанный объект сразу, а получать его только при фактическом обращении. Это снижает объём первоначального чтения и помогает избежать лишних запросов в графах с большим количеством связей.

Ещё одно важное изменение - уникальные ключи. Теперь ограничения уникальности можно описывать на уровне модели и использовать для защиты от дублей. Это особенно полезно при импорте данных, повторной доставке сообщений и реализации идемпотентных обработчиков.

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

redb.Tsak: кластеризация на ключах базы

В redb.Tsak переработан кластерный механизм. Узлы используют ключи базы для согласования и идентификации, а модули теперь могут подключаться из XML-конфигурации. Это делает развёртывание более декларативным и сокращает объём кода, необходимого для запуска одинаковых модулей на разных узлах.

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

redb.Identity: WS-Trust и более точные токены

Сервер redb.Identity получил поддержку WS-Trust. Это расширяет возможности интеграции с системами, где используются старые корпоративные протоколы, SOAP-контракты и федеративные сценарии аутентификации.

В токенах появился корректный `audience`, позволяющий явно указывать целевой сервис. Проверяющая сторона может убедиться, что токен выпущен именно для неё, а не просто подписан доверенным центром. Это снижает риск повторного использования токена в другом сервисе.

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

Безопасность и совместимость

В релизе закрыты выявленные проблемы безопасности, однако точные настройки необходимо проверить после обновления. В первую очередь стоит обратить внимание на проверку audience, права доступа к ключам, настройки WS-Trust, XML-конфигурацию и разрешённые источники шаблонов.

Особую осторожность требуют маршруты, где используются пользовательские бины, Liquid или Scriban. Даже при наличии песочницы следует ограничить набор доступных данных и не передавать в шаблоны секреты, ключи и внутренние объекты приложения.

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

Практический план обновления

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

Для redb.Core важны тесты чтения связанных объектов, корректность ленивых ссылок и отсутствие дублей по новым уникальным ключам. Для redb.Route - проверка XML, шаблонов, кодеков, кэша и пользовательских бинов. Для redb.Tsak - запуск нескольких узлов и проверка восстановления после потери одного из них. Для redb.Identity - тестирование audience, WS-Trust и всех потребителей токенов.

После успешной проверки можно переходить к поэтапному обновлению production-среды. Такой сценарий безопаснее одномоментной замены всей экосистемы и позволяет быстро определить компонент, вызвавший несовместимость.

redb 4.0 выглядит не точечным релизом, а фундаментальным обновлением платформы. XML-маршруты, тестовый набор, новые форматы данных, единый язык выражений, ленивые ссылки, уникальные ограничения, кластеризация и WS-Trust расширяют область применения системы. При этом переход на новую ветку требует полноценной проверки конфигурации и данных: возможности релиза заметные, но цена небрежной миграции для мажорной версии может быть высокой.

Прокрутить вверх