Перейти к содержанию

Маршруты

Маршрут — правило доставки, связывающее класс сообщения + систему-источник + систему-приёмник в рамках одной компании. Только при наличии маршрута сообщение, отправленное источником, попадает к получателю.

Структура маршрута

Маршрут — это тройка:

  • Класс сообщения — какой тип сообщений маршрутизируется.
  • Источник — какая система-отправитель.
  • Приёмник — какая система-получатель.

У одного класса может быть произвольное число маршрутов с разными парами «источник-приёмник» — это позволяет настраивать сложные топологии: один источник → много приёмников, много источников → один приёмник, разные пары для разных условий.

Направленность

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

Это позволяет точно различать роли каждой системы в каждом потоке и не делать неявных предположений о двусторонности.

Поведение шины при отправке

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

  1. Класс сообщения существует в компании? Если нет — отправитель получает ошибку, сообщение не принимается.
  2. Есть маршруты для пары (этот отправитель + этот класс)? Если нет — сообщение успешно принимается, но никому не доставляется. Это штатная ситуация «нет получателей», не ошибка.
  3. Маршруты есть — копии сообщения раскладываются в очереди систем-приёмников из этих маршрутов. По одной копии в каждую очередь.

Поведение «класс есть, маршрутов нет — тихая недоставка без ошибки» — намеренное. Оно позволяет источнику работать единообразно, не зная, есть ли реальные получатели его сообщений. Появление получателя в будущем — это просто новый маршрут в личном кабинете, без изменений на стороне источника.

В DataHUB нет отдельной модели «прав» на отправку — формально любая зарегистрированная ИС может отправить сообщение любого зарегистрированного в её компании класса. Реально регулирует обмен маршрут: пока его нет, ни один получатель сообщения не получит.

Создание маршрута — это явное решение администратора шины, что данный приёмник готов принимать данный поток данных от данного источника. До этого решения никакие сообщения новых типов не «вливаются» в неподготовленную систему. После — маршрут начинает действовать сразу для следующих сообщений.

Поведение при отсутствии обработчика на приёмнике

Доставка сообщения по маршруту — это половина дела. Вторая половина — наличие на стороне приёмника обработчика для этого класса.

Если маршрут существует и сообщение доставлено, но обработчика для класса в модуле приёмника нет (или он отключён) — модуль штатно забирает сообщение из своей очереди и переводит его в специальный статус (в типовом модуле для 1С — «Отсутствует обработчик»). Очередь шины при этом не блокируется, другие сообщения продолжают приходить и обрабатываться. Зависшее сообщение остаётся в локальном пуле модуля и ждёт ручного разбора.

Это разделение ответственности — шина гарантирует доставку, модуль гарантирует обработку. Они проверяются независимо. Поэтому корректный порядок подключения нового класса: сначала обработчик в модуле приёмника, потом маршрут в личном кабинете шины.

Что дальше