Содержание:
2. Баланс нагрузки в системе 1С: Шина
Узел, называемый «МаршрутизаторПоСодержимому» отвечает за распределение по следующим узлам, идущим за ним, сообщений. Для выполнения данного действия, у этого узла есть специальное событие «ОбработчикОпределенияПолучателей», которое содержит формулировки по узлам, относительно тех или иных параметров. Если таких настроек внутри обработчика нет, то узел «МаршрутизаторПоСодержимому» отправит сообщение в каждый из следующих узлов.
Важно знать, что у обработчика задаются такие параметры:
• Параметр: Контекст, отвечает за то, какой именно из узлов ответственен за вызов;
• Параметр «Сообщение» отвечает за само содержимое сообщения, которое подлежит отправке. Данный параметр нельзя редактировать, ни по содержимому, ни по заголовкам.
Если обработчиком была возвращена пустая коллекция с узлами – это означает, что сообщение не прошло этап доставки. Если вернулся массив, который содержит минимум одного не того получателя, то сообщение заново будет перенаправлено в канал с недоставленными сообщениями, однако, все корректные получатели его увидят. Если при процедуре обработки появилась ошибка, то сообщение будет содержаться только внутри канала недоставленных сообщений.
1. Как происходит маршрутизация сообщений для всех и выбранному получателю
Рассмотрим, как происходит маршрутизация сообщений, когда необходимо отправить их всем.
Существует такой процесс, отвечающий за интеграцию:
1. Генерация сообщения через таймер;
2. Расположение сообщения внутри узла «ОтправкаВсем»;
3. Распределение сообщения в узлы: HTTP и RabbitMQНазначение.
А «ОбработчикОпределенияПолучателей» узла «ОтправкаВсем» останется незаполненным.
Этот процесс отображён на скриншоте с примером ниже:
Процесс, отвечающий за интеграцию
Как раз, при отсутствии обработчика по событию «ОбработчикОпределенияПолучателей» сообщение будет направлено и в узел HTTP, и в узел «RabbitMQНазначение».
Такая методика для маршрутизации сообщений используется в тех случаях, когда один текст сообщения нужно отправить в разные ветки, в которых должна пройти независимая его обработка.
Когда сообщение две независимые ветки, как в схеме выше, получили, то остаётся ждать от них ответ и, после его получения, обработать данный ответ.
Если необходимо направить сообщения конкретному получателю или получателям, то алгоритм маршрутизации уже будет несколько иным.
Интеграция будет происходить так: через источник программы «Вход» нужно произвести отправку, но именно программную, к примеру, через обработчика 1С сервиса HTTP. Это показано на схеме далее:
Источник программы «Вход»
Через источник программы наше сообщение отправляется в маршрутизатор относительно содержимого с наименованием «ОпределениеВерсии». Исходя из того, каким будет параметр «Формат», этот маршрутизатор или перенаправит его для трансформации, или перенаправит его в канал «V2».
Код программы у обработчика по событию «ОбработчикОпределенияПолучателей» имеет следующий вид:
метод Трансформироватьилинет(Контекст: Контекствызова,
Сообщение: МаршрутизаторПример2.Сообщение) : Коллекция<УзелСхемы>
пер Следующийузел = Сообщение.Получитьпараметр("Формат") == 1
? Схема. Узлы.Трансформация
: Схема.Узлы. V2
Возврат [СледующийУзел]
;
В случае, когда формат имеет значение единицы – сообщение будет перенаправлено в узел по трансформации, если значение иное, то в канал «V2».
2. Баланс нагрузки в системе 1С: Шина
Рассмотрим, как в системе 1С: Шина происходит балансировка нагрузки.
К примеру, пусть есть некое большое количество сообщений, которое отправляется в «Канал1СНазначение». Схема описанного процесса будет иметь такой вид, как отображено ниже:
Схема описанного процесса
При этом, база данных, которая будет получать сообщения при помощи данного канала, не сможет оперативно произвести их обработку. В таком случае, необходимо проводить ещё дополнительную, параллельную, обработку.
Это значит, что сообщения необходимо распределить между каналами: «Канал1СНазначение1» и «Канал1СНазначение2». А в самой базе данных уже проводить обработку одновременную от этих каналов. Такой метод распределения большого потока сообщений демонстрируется в схеме с примером процесса далее:
Метод распределения большого потока сообщений
После прихода сообщений, они распределяются на узел «БалансировкаНагрузкиНазначений». В этом узле, при помощи случайной генерации чисел, избирается какой-то из двух наших узлов, этот узел и получит сообщение.
Такой метод поможет разграничить сообщения по двум каналам и провести их обработку в базах тех, кто является получателем.
При этом, обработчик события 1С, его программный код, «ОбработчикОпределенияПолучателей» выглядит так, как показано на примере далее:
метод Балансировка(Контекст : Контекствызова,
Сообщение: МаршрутизаторПример3.Сообщение): Коллекция«УзелСхемы»
пер Генератор = новый СлучайныйГенератор()
пер Следующийузел = Генератор.Случайноечисло(е, 1) > 0.5
? Схема.Узлы. Канал1Сназначение1
: Схема. Узлы. Канал1Сназначение2
возврат [Следующийузел]
;
Специалист компании ООО "Кодерлайн"
Андрей Прыкин



