Обмен сообщениями. Что это и зачем это нужно?
Обмен сообщениями. Что это?

Большая часть моей работы посвящена интеграции приложений. Очень странно, что для «1С:Предприятие 8» нигде не описаны промышленные шаблоны интеграции, а если и есть какая-то информация — то ее очень мало. Цель данной статьи (или цикла статей, как получится) стало желание поделится опытом, источниками информации и самое главное полезными книгами. 

Обмен сообщениями

Представим ситуацию, сегодня день получения зарплаты, вы приходите в кассу, а кассира нет на месте. Вы сможете получить зарплату только в том случае, если кассир будет на месте и будет свободным в момент вашего прихода, а так же будет необходимая сумма в кассе предприятия. Это является отличным примером синхронного взаимодействия. Привнесение в эту систему «заявок на выплату», которые утверждаются, а также фиксируют время, когда необходимо обратится в кассу делает эту систему асинхронной. Это намного проще, чем пытаться приходить к кассе вновь и вновь. «Сохранение» намерения получить зарплату в виде сообщения («заявка на выплату») и помещение его в очередь для последующей обработки наглядно иллюстрирует сущность обмена сообщениями.

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

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

  • независимость взаимодействующих приложений через общий интерфейс;
  • экономия и рациональное использование ресурсов;
  • надежность, благодаря возможности накапливать сообщения, а так же благодаря независимости компонентов;
  • возможность доставки сообщений, после сбоя одного из компонентов после «восстановления»;
  • гарантия доставки сообщения.

Канал или очередь — это логический маршрут, объединяющий программы и использующийся для транспортировки сообщений, он также напоминает массив сообщений, который доступный для многих приложений одновременно. Приложения, объединенные с помощью технологии обмена сообщениями, передают данные по каналам сообщений. Изначально система обмена сообщениями не содержит каналов, они создаются по мере определения потребностей.

Сообщение — это наименьшая единица данных, которая может быть передана по каналу сообщений. Для передачи данных отправитель должен разбить их на пакеты, которые затем будут упакованы в сообщения и помещены в канал. Обычно сообщение состоит их двух основных частей:

  • Заголовок сообщения содержит информацию для выполнения адресации в системе обмена сообщениями;
  • Тело сообщения содержит полезные данные и как правило игнорируются системой обмена сообщениями.

Отправитель или поставщик — программа, отправляющая сообщение путем его размещения в канале.

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

Функционирование обмена сообщениями обеспечивается отдельной программной системой — системой обмена сообщениями (message-oriented middleware). Необходимость наличия такой системы обусловлена ненадежностью сетей, различные сбои, необходимостью ускорения процесса принятия решений (итоговое решение формируется из нескольких источников, например: система управления складом, финансовая система, система доставки и другие.). Процедура передачи сообщения состоит из 5 основных этапов:

  1. Создание сообщения;
  2. Отправка сообщения;
  3. Доставка сообщения;
  4. Получение сообщения;
  5. Обработка сообщения.

«Отправить и забыть» (Send and forget) — поместив сообщение в канал (этап 2), отправитель может не заботится о судьбе сообщения, доставку обеспечит система обмена сообщениями.

Преимущества обмена сообщениями

  • Обмен сообщениями позволяет наладить взаимодействие между приложениями. Можно конечно возразить, что все инструменты есть в платформе 1С, но не один не гарантирует доставку;
  • Интеграция разнородных систем и технологий. Использовать для все и вся платформу 1С очень плохая идея, при том, что быстродействие платформы низкое, а масштабирование — дорогое;
  • Взаимодействия между приложениями происходят асинхронно. Для платформы 1С так же верно, пока не закончатся лицензии на подключение;
  • При синхронном взаимодействии отправитель должен дождаться завершения обработки вызова получателем прежде, чем сделать новый вызов. Таким образом, если посмотреть на пример в начале статьи, у касс не будет очередей при использовании «заявок на выплату». Асинхронное взаимодействие позволяет размещать и обрабатывать вызовы с разной скоростью. Другими словами можно балансировать лицензиями на подключение к «1С:Предприятие 8», можно балансировать нагрузку на сервер 1С, создать кэширование на уровне очереди и т. п.;
  • Возможность балансирования нагрузки, система обмена сообщениями формирует очередь запросов, позволяя получателю контролировать скорость их обработки;
  • Надежное взаимодействие между системами;
  • Возможность работы без подключения к сети, например, торговые агенты, которые периодически выполняют синхронизацию с сервером;
  • Приложение может быть интегрировано с множеством приложений используя только — систему обмена сообщениями;
  • Асинхронное взаимодействие позволяет приложению не ожидать результата выполнения задачи другим приложением, когда задача будет выполнена, приложение может быть оповещено о результатах.

Недостатки обмена сообщениями

  • Довольно сложная реализация;
  • Довольно сложно отлаживать и тестировать;
  • Порядок доставки сообщений неизвестен. Необходимо дополнительно восстанавливать порядок сообщений, если он необходим;
  • Дополнительные задержки при использовании обмена сообщениями, в сравнении с использованием прямого вызова приложения;
  • Ограниченная поддержка закрытыми, старыми (legacy) системами.

Литература

Все книги настоятельно рекомендую читать в оригинале, некоторые понятия не имеют аналогов в русском языке. Книги сложно применимы для «1С:Предприятие 8», но позволяют развить навыки принятия архитектурных решений. Последняя книга в списке отлично подойдет для того чтобы начать экспериментировать с паттернами и пощупать настоящую асинхронность.

The «Gang of Four»
. Design Patterns: Elements of Reusable Object-Oriented Software. — Addison-Wesley, 1994, ISBN: 0201633612.
Martin Fowler
. Patterns of Enterprise Application Architecture. — Addison-Wesley, 2003, ISBN: 0321127420.
Gregor Hohpe and Booby Woolf. Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. — Addison-Wesley, 2003, ISBN: 0321200683.
Christian Nagel. Professional C# 6 and .NET Core 1.0. — Willey, 2016, ISBN: 1119096603

От pbazeliuk

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *