
С вами снова Илья Вязников, инженер сопровождения СОФРОС. Продолжаю делится практическими приёмами и полезными настройками платформы.
Когда в интеграционной платформе одновременно обрабатываются тысячи сообщений разных типов, стандартной FIFO-очереди часто бывает недостаточно. Критически важные сообщения должны обрабатываться в первую очередь, даже если система сильно загружена.
В этой статье разберём, как настроить гибкую систему приоритезации очередей в DATAREON Platform на основе типа данных и дополнительных свойств сообщения.
Задача
Нужно было обеспечить приоритетную обработку сообщений определённых типов, либо с определенными свойствами. Сообщения с высоким приоритетом должны проходить раньше остальных, а система при этом оставалась простой в поддержке и расширении.
Решение
DATAREON Platform позволяет создавать правила обработки очередей, в которых можно:
-
Распределять входящие сообщения по разным очередям
-
Извлекать сообщения для обработки в заданном порядке приоритетов.
Настройка
1. Создание очередей
Правила обработки создаются в Центре Настройки в разделе Обработка данных — Правила обработки очередей.
В правиле обработки очередей на вкладке «Основные» указываем название правила, и включаем его отметив тик-бокс.
Добавляем необходимые очереди, например:
-
Queue_HighPriority— Высокий приоритет -
Queue_NormalPriority— Обычный приоритет -
Queue_LowPriority— Низкий приоритет (по умолчанию) -
Queue_Property1Priority,Queue_Property2Priority— очереди по значению свойства

2. Правило размещения сообщений (Placement Rule)
На вкладке «Правило размещения» настраиваем логику распределения:
// Словарь для определения очереди по типу данных// Если сообщение содержит определенный тип данных, оно будет отправлено в соответствующую очередьOwnDictionary<Metadata.DataTypes, QueueState> DictionaryOfValidQueuesByType = new(){ [Metadata.DataTypes.Тип_1_18235] = Queues.Queue_NormalPriority, [Metadata.DataTypes.Тип_2_18235] = Queues.Queue_HighPriority};// Словарь для определения очереди по строковому свойству "stringProperty"// Если сообщение содержит определенное значение свойства, оно будет отправлено в соответствующую очередьOwnDictionary<string, QueueState> DictionaryOfValidQueuesByProperty = new(){ ["Property_1"] = Queues.Queue_Property1Priority, ["Property_2"] = Queues.Queue_Property2Priority};// Назначение приоритетных очередей// 1. Проверяем, есть ли соответствие типа данных в словаре DictionaryOfValidQueuesByTypeif (!DictionaryOfValidQueuesByType.TryGetValue(InitMessage.GetDataType(), out QueueState Queue_Local)){ // 2. Если нет, проверяем соответствие строкового свойства в словаре DictionaryOfValidQueuesByProperty If (!DictionaryOfValidQueuesByProperty.TryGetValue(InitMessage.GetStringProperty("stringProperty"), out Queue_Local)) { // 3. Если нет ни по типу данных, ни по строковому свойству – назначаем очередь по умолчанию (LowPriority) Queue_Local = Queues.Queue_LowPriority; // Очередь по умолчанию }}// Присваиваем выбранную очередьQueue = Queue_Local;
Как работать с этим кодом:
-
Добавление новых типов данных – если появится новый тип данных, который нужно направлять в определенную очередь, просто добавьте новую запись в DictionaryOfValidQueuesByType.
-
Добавление новых значений stringProperty – если появится новое значение stringProperty, которое должно попадать в конкретную очередь, добавьте его в DictionaryOfValidQueuesByProperty.
-
Если ни один параметр не совпадает – сообщение автоматически попадет в очередь Queue_LowPriority.
-
Логика приоритета:
-
В первую очередь проверяется соответствие по типу данных.
-
Если тип данных не определяет очередь – проверяется значение свойства stringProperty.
-
Если и это не дало результата – сообщение уходит в очередь по умолчанию.
-
3. Правило извлечения сообщений (Extraction Rule)
На вкладке «Правило извлечения» определяем порядок обработки:
// Формируем список очередей в порядке их приоритета (от высокой к низкой)var priorityQueues = new List<QueueState>{ Queues.Queue_HighPriority, // Очередь с наивысшим приоритетом Queues.Queue_NormalPriority, // Очередь со средним приоритетом Queues.Queue_Property1Priority, // Очередь, связанная с Property_1 Queues.Queue_Property2Priority // Очередь, связанная с Property_2};// Находим первую непустую очередь или устанавливаем очередь по умолчаниюQueue = priorityQueues.FirstOrDefault(q => q.Count > 0) ?? Queues.Queue_LowPriority;
Как работает код:
-
Определение приоритетных очередей
-
Очереди расположены в порядке приоритета – от самой важной (Queue_HighPriority) до менее значимых (Queue_Property2Priority).
-
Если появятся новые приоритетные очереди, их можно добавить в список priorityQueues в нужном порядке.
-
-
Поиск первой непустой очереди
-
Метод FirstOrDefault(q => q.Count > 0) ищет первую очередь, в которой есть сообщения.
-
Как только находит такую очередь, она выбирается для обработки.
-
-
Если все очереди пусты
-
Оператор ?? означает, что если FirstOrDefault() не нашел не пустую очередь (вернул null), используем Queue_LowPriority как очередь по умолчанию.
-
Как работать с этим кодом:
-
Если нужно изменить приоритет очередей, просто поменяйте порядок элементов в priorityQueues.
-
Если требуется добавить новую очередь, добавьте её в priorityQueues в нужное место (в зависимости от её приоритета).
-
Очередь Queue_LowPriority остается запасной, если все остальные очереди пусты.
4. Применение правила
Созданное правило обработки очередей указывается в настройках нужных внешних систем либо сервисов в поле Правило обработки очередей.

После применения конфигурации в Центре мониторинга появляются новые очереди, по которым можно отслеживать нагрузку и состояние:

Результат
После внедрения настройки сообщения будут обрабатываться в соответствии с настроенным приоритетом. Критически важные сообщения стабильно проходят раньше остальных, что позволит повысить предсказуемость и надёжность интеграционных процессов.
Преимущества подхода
-
Простота расширения — достаточно добавить новую запись в словарь.
-
Явный приоритет — порядок очередей в списке priorityQueues полностью определяет стратегию.
-
Универсальность — работает как по типу данных, произвольным свойствам сообщения, так и по источнику, обработчику не рассмотренным в примере.
-
Удобный мониторинг — каждая очередь видна в Центре мониторинга.
Заключение
Приоритезация очередей — мощный инструмент DATAREON Platform, который помогает решать задачи высоконагруженных интеграций. Подход, описанный выше, легко адаптировать под свои типы сообщений и бизнес-правила.
Подробнее с правилами обработки очередей вы можете ознакомиться в документации:
Настройка правил с помощью кода C#
Если у вас есть вопросы по реализации или нужны уточнения — пишите в комментариях.
Теги: DATAREON, Platform, очереди, приоритизация, message queue, интеграция, C#, middleware
ссылка на оригинал статьи https://habr.com/ru/articles/1062536/