Перейти к основному содержимому

05 Группа “Последовательность”. Описание узлов

Узел Разделить

Узел Разделить в Палитре
Узел Разделить на Холсте

Разбивает сообщение на последовательность сообщений.

Принимает:

  • payload объект | строка | массив | буфер

Поведение узла определяется типом msg.payload:

  • строка/буфер – сообщение разделяется с помощью указанного символа (по умолчанию: \n), последовательности буфера или по фиксированной длине.
  • массив – сообщение разбивается на отдельные элементы массива или массивы фиксированной длины.
  • объект – сообщение отправляется для каждой пары ключ/значение объекта.

Выводит:

  • parts объект

Это свойство содержит информацию о том, как сообщение было отделено от исходного сообщения. При передаче на узел join последовательность может быть собрана обратно в одно сообщение.

Объект содержит следующие свойства:

  • id – идентификатор группы сообщений
  • index – позиция в группе
  • count – если известно, общее количество сообщений в группе. Смотрите потоковый режим ниже.
  • type – тип сообщения: строка = string; массив = array; объект = object; буфер = buffer
  • ch – для строки или буфера данные, использованные для разделения сообщения, в виде строки или массива байтов
  • key – для объекта - ключ свойства, из которого было создано это сообщение. Узел также может быть сконфигурирован для копирования этого значения в другие свойства сообщения, такие как msg.topic.
  • len – длина каждого сообщения при разделении с использованием значения фиксированной длины.

Этот узел облегчает создание потока, который выполняет общие действия над последовательностью сообщений, перед тем как с помощью узла join объединить последовательность обратно в одно сообщение.

Он использует свойство msg.parts для отслеживания отдельных частей последовательности.

Потоковый режим

Узел также может использоваться для переформатирования потока сообщений. Например, последовательное устройство, которое отправляет завершенные новой строкой команды, может доставлять одно сообщение с частичной командой в конце. В потоковом режиме этот узел будет разбивать сообщение и отправлять каждый завершенный сегмент. Если в конце есть частичный сегмент, узел удержит его и добавит к следующему полученному сообщению.

При работе в этом режиме узел не будет устанавливать свойство msg.parts.count, так как он не знает, сколько сообщений ожидать в потоке. Это означает, что его нельзя использовать вместе с узлом join в его автоматическом режиме.

Узел Соединить

Узел Соединить в Палитре
Узел Соединить на Холсте

Объединяет последовательности сообщений в одно сообщение.

Доступны три режима:

  • автоматический – при использовании с узлом Разделить он автоматически объединит сообщения, чтобы восстановить структуру сообщения, которая была до разделения.
  • ручной – объединяет последовательности сообщений различными способами.
  • агрегация последовательности – применяет JSONata-выражение ко всем сообщениям в последовательности, чтобы свести его к одному сообщению.

Принимает:

  • parts объект

Чтобы автоматически соединить последовательность сообщений, у них всех должно быть установлено это свойство. Узел Разделить генерирует это свойство, но его можно создать вручную. Оно имеет следующие свойства:

  1. id - идентификатор группы сообщений
  2. index - позиция в группе
  3. count - общее количество сообщений в группе
  4. type - тип сообщения: строка = string; массив = array; объект = object; буфер = buffer
  5. ch - для строки или буфера данные, использованные для разделения сообщения, в виде строки или массива байтов
  6. key - для объекта - ключ свойства, из которого было создано это сообщение
  7. len - длина каждого сообщения при разделении с использованием значения фиксированной длины
  • complete

Если установлено, узел добавит payload, а затем отправит выходное сообщение в своем текущем состоянии. Если вы не хотите добавлять payload, удалите его из msg.

Автоматический режим

В автоматическом режиме используется свойство parts входящих сообщений, чтобы определить способ объединения последовательности. Это позволяет автоматически выполнять обратное действие для узла Разделить.

Ручной режим

Когда узел настроен на соединение в ручном режиме, он может объединять последовательности сообщений в различные результаты:

  • строка или буфер - создается путем объединения выбранного свойства каждого сообщения с указанными символами соединения или буфером.
  • массив - создается путем добавления каждого выбранного свойства или всего сообщения в выходной массив.
  • объект ключей/значений - создается с использованием свойства каждого сообщения для определения ключа, под которым хранится требуемое значение.
  • слитый объект - создается путем объединения свойства каждого сообщения в один объект.

Другие свойства исходящего сообщения берутся из последнего сообщения, полученного перед отправкой результата.

Свойство кол-во может быть установлено для количества сообщений, которое должно быть получено перед генерацией выходного сообщения. Для выходных данных объекта, когда это число достигнуто, узел может быть настроен на отправку сообщения для каждого последующего полученного сообщения.

Свойство время (сек) может быть установлено, чтобы инициировать отправку нового сообщения с использованием всего, что было получено до сих пор.

Если сообщение получено с установленным свойством msg.complete, выходное сообщение завершается и отправляется. Это сбрасывает любой подсчет частей.

Если сообщение получено с установленным свойством msg.reset, частично завершенное сообщение удаляется и не отправляется. Это сбрасывает любой подсчет частей.

Режим агрегации последовательности

Когда настроено объединение в режиме агрегирования, выражение применяется к каждому сообщению в последовательности, и результат накапливается для создания одного сообщения.

  1. Начальное значение

Начальное значение накопленного значения $A.

  1. Агрегирующее выражение

Выражение JSONata, которое вызывается для каждого сообщения в последовательности. Результат передается следующему вызову выражения как накопленное значение. В выражении могут использоваться следующие специальные переменные:

  • $A: накопленное значение,
  • $I: индекс сообщения в последовательности,
  • $N: количество сообщений в последовательности.
  1. Исправляющее выражение

Необязательное выражение JSONata, которое применяется после того, как агрегирующее выражение было применено ко всем сообщениям в последовательности. В выражении могут использоваться следующие специальные переменные:

  • $A: накопленное значение,
  • $N: количество сообщений в последовательности.

По умолчанию агрегирующее выражение применяется по порядку, от первого до последнего сообщения последовательности. При желании его можно применять в обратном порядке.

Пример: следующие параметры, при получении последовательности числовых значений, рассчитывают среднее значение:

  • Агрегирующее выражение: $A+payload
  • Начальное значение: 0
  • Исправляющее выражение: $A / $N

Хранение сообщений

Этот узел будет буферизировать сообщения внутри, чтобы работать между последовательностями. Параметр nodeMessageBufferMaxLength можно использовать для ограничения количества сообщений, которые узел будут буферизовать.

Узел Сортировать

Узел Сортировать в Палитре
Узел Сортировать на Холсте

Функция, которая сортирует свойство сообщения или последовательность сообщений.

Когда узел настроен сортировать свойство сообщения, он сортирует данные массива в указанном свойстве сообщения.

Когда узел настроен сортировать последовательность сообщений, он будет переупорядочивать сообщения.

Порядок сортировки может быть:

  • Восходящий.
  • Нисходящий.

Для чисел, числовое упорядочивание можно указать с помощью флажка.

Когда выбрана сортировка свойства, ключом сортировки может быть значение элемента или выражение JSONata. Когда выбрана сортировка последовательности сообщений, ключом сортировка может быть свойство сообщения или выражение JSONata.

При сортировке последовательности сообщений узел сортировки полагается на полученные сообщения, чтобы установить msg.parts. Узел Разделить генерирует это свойство, но его можно создать вручную. Оно имеет следующие свойства:

  • id - идентификатор группы сообщений.
  • index - позиция в группе.
  • count - общее количество сообщений в группе.
к сведению

Этот узел буферизирует сообщения внутри для своей работы. Чтобы предотвратить непредвиденное использование памяти, можно указать максимальное количество хранимых сообщений. По умолчанию количество сообщений не ограничено.

Свойство nodeMessageBufferMaxLength устанавливается в settings.js.

Узел Группировать

Узел Группировать в Палитре
Узел Группировать на Холсте

Создает последовательности сообщений на основе различных правил.

Существует три режима создания последовательностей сообщений:

  1. Количество сообщений - группирует сообщения в последовательности заданной длины. Параметр совпадения указывает, сколько сообщений в конце одной последовательности следует повторить в начале следующей последовательности.
  2. Интервал времени - группирует сообщения, поступающие в указанный интервал. Если в течение интервала сообщения не поступают, узел может при желании отправлять пустое сообщение.
  3. Объединение последовательностей - создает последовательность сообщений путем объединения входящих последовательностей. Каждое сообщение должно иметь свойство msg.topic и свойство msg.parts, определяющие его последовательность. Узел настраивается со списком значений topic для идентификации порядка объединения последовательностей.

Хранение сообщений

Этот узел будет буферизировать сообщения внутри, чтобы работать с последовательностями. Параметр nodeMessageBufferMaxLength можно использовать для ограничения количества сообщений, которые узел будут буферизовать.

Если сообщение получено с установленным свойством msg.reset, буферизованные сообщения удаляются и не отправляются.