Разбивка сообщения на части
В этом разделе приведено описание возможных вариантов реализации разбивки сообщения, содержащего массив элементов.
В Платформу отправляется сообщение, содержащее массив элементов. Платформа разбивает полученное сообщение на отдельные сообщения и отправляет их Системе-получателю.
Предварительные условия
Создайте следующие элементы:
Внешний тип данных Инициирующее сообщение в сценарии разбивки сообщения
Тип данных Результат в сценарии разбивки сообщения
Инициация процесса
Инициатором выступает Система-отправитель в сценарии разбивки сообщения, на которую поступает сообщение соответствующее внешнему типу данных Инициирующее сообщение в сценарии разбивки сообщения для запуска процесса.
Система-отправитель в сценарии разбивки сообщения
Тип: Расширенное Rest API
Порт для публикации API: любой свободный
Обработчик Инициирующий запрос в сценарии разбивки сообщения
Тип: Веб-обработчик
Шаблон пути: /СценарийСинхронныйОтветИнициирующийЗапрос
Тип метода: Post
На вкладке В Platform добавлена переменная ИнициирующееСообщение с внешним типом Инициирующее сообщение в сценарии разбивки сообщения.
параметр Массив: включен
Входящий процесс трансформации в сценарии разбивки сообщения
Вариант 1: Разделение массива поэлементно, на каждый элемент массива зарегистрировано новое сообщение с приведением к типу данных
Для реализации первого варианта сценария создайте следующие элементы:
Входящий процесс трансформации в сценарии разбивки сообщения со следующими параметрами:
Входящие данные: переменная ИнициирующийЗапрос с внешним типом Инициирующее сообщение в сценарии разбивки сообщения, выбран параметр Массив.
Параметр Запускать автоматически: включен
На вкладке Схема добавлен шаг алгоритма:
Код алгоритма:
int re = InitMessage.BodyArrayCount(); for(int i = 0; i < re; i++) { Message newMessage = new Message(); newMessage.SetBody(InitMessage.CastToDataType<Человек>(i)); SetMessage(newMessage); Logger.Info($"выбрал - {newMessage}"); Transport.RegisterMessage(newMessage); }
Бизнес-процесс Процесс сценария разбивки сообщения со следующими параметрами:
Параметр Запускать автоматически: включен
Переменная обработки: Результат с внешний типом Инициирующее сообщение в сценарии разбивки сообщения
На вкладке Схема добавлен шаг Отправка:
Сообщение: переменная Результат
Тип получателя: Модуль
Получатель: Система-получатель в сценарии разбивки сообщения
Ожидание: Ожидание не требуется
Система-получатель в сценарии разбивки сообщения со следующими параметрами:
Тип: Веб-сервисы
Протокол: REST
Формат: JSON
Способ получения сообщений из Платформы: Внешний сервис вызывает методы Platform
Порт: должен быть свободным
Демо-пример:
Создайте запрос в Postman:
Выберите метод Post.
В URL введите адрес Системы-отправителя в сценарии разбивки сообщения и шаблон пути обработчика Инициирующий запрос в сценарии разбивки сообщения
В теле запроса введите следующий код:
[ { "имя": "Иван", "фамилия": "Сорокин" }, { "имя": "Илья", "фамилия": "Перышкин" } ]
Отправьте запрос.
Результат запроса: ответ 200.
В Центре Мониторинга и администрирования в Системе-получателе в сценарии разбивки сообщения на вкладке Очередь будут отображаться два сообщения. Каждое сообщение содержит один элемент массива.
В результате будет выполнено разделение массива поэлементно, и на каждый элемент массива зарегистрировано новое сообщение с приведением к типу данных.
Вариант 2: Разделение массива поэлементно, на каждый элемент массива зарегистрировано новое сообщение без приведения к типу данных
Для реализации второго варианта сценария создайте следующие элементы:
Входящий процесс трансформации в сценарии разбивки сообщения вариант 2 со следующими параметрами:
Системы: выбрана Система-отправитель в сценарии разбивки сообщения.
Входящие данные: выбрана переменная ИнициирующееСообщение с внешним типом Инициирующее сообщение в сценарии разбивки сообщения.
Выбран параметр Массив.
Параметр Запускать автоматически: включен
На вкладке Схема добавлен шаг Алгоритм:
Код алгоритма:
foreach(var item in ИнициирующееСообщение) { Logger.Verbose($"Регистрация сообщения {item}"); Message message = new Message(); message.SetBody(item); SetOutMessage(message);
}
Бизнес процесс Процесс сценария разбивки сообщения 2 вариант со следующими параметрами:
Параметр Запускать автоматически: включен.
Переменная обработки: Сообщение с внешним типом Инициирующее сообщение в сценарии разбивки сообщения
На вкладке Схема добавлен шаг Отправка:
Сообщение: Переменная Сообщение
Тип получателя: Модуль
Получатель: Система-получатель в сценарии разбивки сообщения
Ожидание: Ожидание не требуется
Демо-пример:
Снимите параметр Запускать автоматически для трансформации Входящий процесс трансформации в сценарии разбивки сообщения.
Установите параметр Запускать автоматически для трансформации Входящий процесс трансформации в сценарии разбивки сообщения вариант 2.
Создайте запрос в Postman:
Выберите метод Post.
В URL введите адрес Системы-отправителя в сценарии разбивки сообщения и шаблон пути обработчика Инициирующий запрос в сценарии разбивки сообщения
В теле запроса введите следующий код:
[ { "имя": "Иван", "фамилия": "Сорокин" }, { "имя": "Илья", "фамилия": "Перышкин" } ]
Отправьте запрос.
Результат запроса: ответ 200.
В Центре Мониторинга и администрирования в Системе-получателе в сценарии разбивки сообщения на вкладке Очередь будут отображаться два сообщения. Каждое сообщение содержит один элемент массива.
В результате будет выполнено разделение массива поэлементно, и на каждый элемент массива зарегистрировано новое сообщение без приведения к типу данных.
Вариант 3: Разбивка массива поэлементно без отправки исходного сообщения
Для реализации второго варианта сценария создайте Входящий процесс трансформации в сценарии разбивки сообщения вариант 3 со следующими параметрами:
Системы: выбрана Система-отправитель в сценарии разбивки сообщения.
Входящие данные: выбрана переменная ИнициирующееСообщение с внешним типом Инициирующее сообщение в сценарии разбивки сообщения.
Исходящие данные: выбрана переменная Результат с типом Результат в сценарии разбивки сообщения.
Выбран параметр Массив.
Параметр Запускать автоматически: включен
На вкладке Схема добавлен шаг Алгоритм:
Код алгоритма:
foreach(var item in ИнициирующееСообщение) { Logger.Verbose($"Регистрация сообщения {item}"); Message message = new Message(); РезультатВСценарииРазбивкиСообщения результат = new РезультатВСценарииРазбивкиСообщения(); результат.Имя = item.Имя; результат.Фамилия = item.Фамилия; //Или заполнить все поля //результат.InitFromJson(item.ToJson()); message.SetBody(результат); SetOutMessage(message); }
Демо-пример:
Снимите параметр Запускать автоматически для трансформации Входящий процесс трансформации в сценарии разбивки сообщения вариант 2.
Установите параметр Запускать автоматически для трансформации Входящий процесс трансформации в сценарии разбивки сообщения вариант 3.
Создайте запрос в Postman:
Выберите метод Post.
В URL введите адрес Системы-отправителя в сценарии разбивки сообщения и шаблон пути обработчика Инициирующий запрос в сценарии разбивки сообщения
В теле запроса введите следующий код:
[ { "имя": "Иван", "фамилия": "Сорокин" }, { "имя": "Илья", "фамилия": "Перышкин" } ]
Отправьте запрос.
Результат запроса: ответ 200.
В Центре Мониторинга и администрирования в Системе-получателе в сценарии разбивки сообщения на вкладке Очередь будут отображаться два сообщения. Содержимое каждого сообщения соответствует отправленным элементам массива.
Вариант 4: Разбивка массива поэлементно c отправкой исходного сообщения
Для каждого элемента массива будет зарегистрировано новое сообщение. Исходное сообщение будет также отправлено.
Для реализации второго варианта сценария создайте следующие элементы:
Входящий процесс трансформации в сценарии разбивки сообщения вариант 4 со следующими параметрами:
Системы: выбрана Система-отправитель в сценарии разбивки сообщения
Входящие данные: выбрана переменная ИнициирующееСообщение с внешним типом Инициирующее сообщение в сценарии разбивки сообщения
Выбран параметр Массив
Параметр Запускать автоматически: включен
На вкладке Схема добавлен шаг Алгоритм:
Код алгоритма:
foreach(var item in ИнициирующееСообщение) { Logger.Verbose($"Регистрация сообщения {item}"); Message message = new Message(); message.SetBody(item); SetOutMessage(message);
}
Бизнес процесс Процесс сценария разбивки сообщения 4 вариант со следующими параметрами:
Параметр Запускать автоматически: включен.
Переменная обработки: ИнициирующееСообщение с внешним типом Инициирующее сообщение в сценарии разбивки сообщения.
На вкладке Схема добавлен шаг Отправка:
Сообщение: переменная ИнициирующееСообщение
Тип получателя: Модуль
Получатель: Система-получатель в сценарии разбивки сообщения
Ожидание: Ожидание не требуется
Демо-пример:
Снимите параметр Запускать автоматически для трансформации Входящий процесс трансформации в сценарии разбивки сообщения вариант 3.
Установите параметр Запускать автоматически для трансформации Входящий процесс трансформации в сценарии разбивки сообщения вариант 4.
Создайте запрос в Postman:
Выберите метод Post.
В URL введите адрес Системы-отправителя в сценарии разбивки сообщения и шаблон пути обработчика Инициирующий запрос в сценарии разбивки сообщения
В теле запроса введите следующий код:
[ { "имя": "Иван", "фамилия": "Сорокин" }, { "имя": "Илья", "фамилия": "Перышкин" } ]
Отправьте запрос.
Результат запроса: ответ 200.
В Центре Мониторинга и администрирования в Системе-получателе в сценарии разбивки сообщения на вкладке Очередь будут отображаться три сообщения. Содержимое каждого сообщения соответствует отправленным элементам массива и его элементам.