Настройка внешней очереди регистрации изменений на Valkey

Экстрактор 1С позволяет подключить внешнюю очередь регистрации изменений на Valkey.

В стандартной поставке Экстрактора 1С хранилищем очереди изменений служит регистр сведений. Для версий 3.12 и выше внешняя очередь настраивается как работа с Valkey.

В некоторых случаях, может потребоваться вынос очереди изменений в внешний сервис:

  1. Когда скорости записи в регистр сведений «Очередь изменений» не хватает

  2. Когда Регистрация изменений выполняется в «Рабочей» базе 1С, а выгрузка данных в БД-приемник должна делаться из «ночной копии» этой базы 1С

Выбор способа подключения

Версия Экстрактора

Способ подключения к Valkey

Что требуется

3.12 и выше

Через HTTP-сервис; драйвер «Redis»

Сервис http-api-redis, который передаёт команды из 1С в Valkey

Начиная с 3.15.1.50

Напрямую через Native DLL; драйвер «Redis (Native DLL)»

Внешняя компонента, выбранная в настройках очереди

Названия драйверов «Redis» и «Redis (Native DLL)» в интерфейсе сохраняются при работе с Valkey. HTTP-сервис и Native DLL — два отдельных способа подключения. Для прямого подключения через компоненту сервис http-api-redis не требуется.

Valkey через внешнюю компоненту Native DLL

Начиная с 3.15.1.50 внешняя очередь Valkey может работать напрямую через Native DLL. Выбор, загрузка и обновление библиотеки выполняются по общей инструкции «Внешние компоненты».

  1. Откройте «Сервис» → «Настройки» → «Настройки очереди».

  2. В группе «Внешняя очередь» выберите драйвер «Redis (Native DLL)».

  3. Выберите компоненту Redis для подключения к Valkey и откройте её карточку. Сверьте платформу сервера 1С и версию библиотеки с описанием компоненты.

  4. Нажмите «Обновить из облака» или «Загрузить из файла», затем выполните «Проверить подключение» в карточке компоненты.

  5. Вернитесь в настройки очереди и укажите адрес и порт сервера Valkey, номер базы, пользователя и пароль. Заполните таймаут подключения в миллисекундах, количество попыток и паузу между ними.

  6. Настройте «Лимит получаемых записей». По умолчанию количество записей для загрузки ограничено 100.

  7. Сохраните настройки и проверьте регистрацию и обработку изменений на тестовом проекте.

Проверка библиотеки в карточке компоненты не заменяет проверку доступа к серверу Valkey и обработки очереди.

Внешняя очередь Valkey с драйвером Redis (Native DLL)

Valkey через HTTP-сервис

Для этого способа используется прокси-сервис http-api-redis, который передаёт команды Экстрактора между 1С и Valkey. Внешняя компонента не требуется. Ниже описаны установка сервиса, его настройка и HTTP-методы; к прямому подключению через Native DLL эти действия не относятся.

http-api-redis — специализированный HTTP-сервис для взаимодействия Экстрактора 1С с Valkey. Имя сервиса и пути API с именем Redis сохраняются.

Для работы http-api-redis требуется:
  • отдельная виртуальная машина на Linux, на которой разворачивается docker-образ http_api_redis, которая соответствует минимальным системные требованиям: 4-ехъядерный процессор и 16 ГБ оперативной памяти;

  • Установленный Valkey (конфигурируется заказчиком, исходя из нагрузки и потребностей).

  • Сетевая связность между кластером 1С <→ http-api-redis <→ Valkey.

Настройка HTTP-подключения

В разделе «Настройки» Экстрактора 1С перейдите на вкладку «Настройки очереди», выберите драйвер «Redis» и заполните «Настройки Redis». Укажите адрес и порт HTTP-сервиса; его подключение к серверу Valkey настраивается на стороне сервиса.

Начиная с релиза 3.12.1.82 Экстрактора 1С, была улучшена работа с сервисом http-api-redis.

Добавлен параметр чтения очереди «Лимит получаемых записей» (&limit=...), позволяющий управлять объёмом чтения за одну транзакцию, оптимизирована обработка внешней очереди внутри ядра Экстрактора 1С и добавлена настройка таймаута в секундах.

Чтобы применить изменения необходимо обновить сервис http-api-redis и Экстрактор 1С до версии 3.12.1.82 и выше.

Инструкция по обновлению сервиса http-api-redis
  1. Переходим в каталог сервиса (туда, где лежит docker-compose.yml)

  2. Останавливаем сервис: docker compose down

  3. Меняем 1 строку в docker-compose.yml с image: git.denvic.ru:5050/pub/rest-api-redis/redisapiweb:1.0.7 на image: git.denvic.ru:5050/pub/rest-api-redis/redisapiweb:latest

  4. Запускаем: docker compose up -d

Общий принцип работы

Каждая работающая подписка на события Экстрактора 1С формирует запись «ключ — значение» во внешней очереди. Для HTTP-подключения запись передаётся через http-api-redis, для Native DLL — напрямую через компоненту. Ключ соответствует комбинации:

  • Проект;

  • Строка проекта;

  • Сегмент/Партиция;

  • И в «Значение» пишет набор «Параметров» для выгрузки сегмента/партиции.

Что важно:

При использовании Valkey и регистра сведений используется режим «грязной» записи.

Т.е. при записи в «Очередь изменений», инициированного подпиской, система не проверяет дубли, а просто добавляет новую запись.

Все проверки на «дубли», чистка их делается уже в процессе выгрузки (исполнения) Проекта

Это позволяет:

  • Избежать блокировок на Регистре сведений

  • Фиксировать события максимально быстро

Когда приходит время выгрузки проекта, Экстрактор 1С выполняет следующие действия:

  • выборку по маске GUIDПроекта*

  • получает текущий список изменений

  • «схлопывает» повторяющиеся значения

  • и по полученному списку выгружаемых сегментов/партиций с «отборами» делает выгрузку

  • удаляет из Valkey успешно обработанные записи очереди.

HTTP-методы сервиса http-api-redis

Этот раздел относится только к HTTP-подключению. При использовании Native DLL вызовы этих HTTP-методов не нужны.

В htp-api-redis встроен Swagger, доступный по адресу: http://IP-адрес:Port/swagger/index.html

С помощью метода POST(/api/v1/Redis) мы передаем комбинацию:

  • В заголовке - ключ (составной ключ Guid проекта + СтрокаПроекта + Сегмент/Партиция + РандомныйХвост)

  • В Data - Набор параметров (в json/xml)

В результате в Valkey записывается уникальная запись «Ключ: Значение».

Далее, когда Экстрактор 1С запускает Проект на выполнение, то Экстрактор 1С

а) сначала вычитывает накопленный ранее массив ключей по методу GET (/api/v1/Redis) по маске ключей: Ключ*

б) Перебирает все ключи, группирует их и обрабатывает как «Очередь изменений»

в) и потом удаляет обработанные ключи методом DELETE (/api/v1/Redis)

Есть еще следующий кейс (но учтите, что на больших базах он еще не проверялся. Сначала проверяйте на тестовых средах):

  1. Создается реплика базы 1С

  2. Рабочая 1С и реплика 1С подключаются к одному внешнему хранилищу Valkey.

  3. Рабочая 1С сохраняет в Valkey данные очереди изменений.

  4. Реплика 1С читает очередь из Valkey и выполняет проекты выгрузки Экстрактора 1С.