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 расширяют область применения системы. При этом переход на новую ветку требует полноценной проверки конфигурации и данных: возможности релиза заметные, но цена небрежной миграции для мажорной версии может быть высокой.
