Архитектура Message Queuing
156C# и .NET --- Сетевое программирование --- Архитектура Message Queuing
В Message Queuing сообщения записываются и читаются из специальной очереди сообщений. Сами сообщения и очереди сообщений имеют несколько атрибутов, которые требуют пояснений.
Сообщения
Сообщение посылается в очередь сообщений. Сообщение включает тело, содержащее пересылаемые данные, и метку — заголовок сообщения. В тело сообщения может быть помещена любая информация. В .NET имеется набор форматировщиков, преобразующих данные, которые помещаются в тело. Помимо метки и тела сообщение включает дополнительную информацию об отправителе, конфигурацию таймаута, идентификатор транзакции или приоритет.
Очереди сообщений содержат сообщения нескольких типов:
Нормальное сообщение отправляется любым приложением.
Подтверждающее сообщение (acknowledgment message) уведомляет о состоянии нормального сообщения. Подтверждающие сообщения отправляются в административные очереди, чтобы уведомить об успехе или сбое при отправке нормальных сообщений.
Ответные сообщения отправляются принимающим приложением, когда исходный отправитель требует некоторого специального ответа.
Отчетные сообщения генерируются системой Message Queuing. К этой категории относятся тестовые сообщения и сообщения отслеживания маршрутизации.
Сообщение может обладать приоритетом, определяющим порядок, в котором сообщения будут читаться из очереди. Сообщения сортируются в очереди в соответствии с приоритетами, поэтому следующим из очереди всегда читается то сообщение, которое имеет наивысший приоритет.
Сообщения имеют два режима доставки: экспресс (express) и восстановимый (recoverable). Экспресс-сообщения доставляются очень быстро, потому что в качестве хранилища очереди используется оперативная память. Восстановимые сообщения сохраняются в файлах на каждом шаге маршрута — до тех пор, пока они не будут доставлены. Таким образом, доставка сообщений гарантируется, даже если компьютер будет перегружен или произойдет сбой сети.
Транзакционные сообщения — это специальная версия восстановимых сообщений. Благодаря транзакционным сообщениям гарантируется, что сообщения будут доставлены только однажды, и в том же порядке, в каком были отправлены. С транзакционными сообщениями приоритеты не используются.
Очередь сообщений
Очередь сообщений представляет собой своего рода "накопительный бункер" для сообщений. Сообщения, сохраняемые на диске, размещаются в каталоге <windows>\system32\msmq\storage.
Общедоступные или частные очереди обычно применяются для отправки сообщений, но существуют также и другие типы очередей.
Тип очереди | Описание |
---|---|
Общедоступная (public) очередь | Публикуется в Active Directory. Информация о таких очередях реплицируется в доменах Active Directory. Для получения информации о таких очередях можно воспользоваться средствами просмотра и поиска. К общедоступной очереди можно обращаться, не зная имени компьютера, на котором она расположена. Такую очередь можно переместить с одной системы на другую и клиент этого не
заметит. В среде рабочей группы (Workgroup) невозможно создавать общедоступные очереди, потому что им нужна служба Active Directory. |
Частные (private) очереди | Не публикуются в Active Directory. Эти очереди доступны, только когда известны их полные путевые имена. Частные очереди могут использоваться в среде Workgroup. |
Журнальные (journal) очереди | Служат для хранения копий сообщений после того, как они были получены или отправлены. Включение протоколирования для общедоступной или частной очереди автоматически создает журнальную очередь. Журнальные очереди бывают двух типов: исходное протоколирование и целевое протоколирование. Исходное протоколирование включается свойствами сообщения - журнальные сообщения сохраняются на исходной системе. Целевое протоколирование включается свойствами очереди - эти сообщения сохраняются в журнальной очереди целевой системы. |
Очереди мертвых писем (dead-letter) | Хранят сообщения, если они не появляются на целевой системе по истечении определенного периода времени. В противоположность синхронному программированию, где ошибки обнаруживаются немедленно, при использовании Message Queuing ошибки должны обрабатываться иначе. Очередь мертвых писем можно проверять для обнаружения не доставленных сообщений. |
Административные очереди | Содержат подтверждения об отправленных сообщениях. Отправитель может указать административную очередь, из которой он будет получать уведомления об успешной отправке сообщений. |
Очередь ответов | Применяется, когда требуется нечто большее, чем простое подтверждение о факте отправки в качестве ответа со стороны получателя. Принимающее приложение может посылать ответные сообщения обратно исходному отправителю. |
Очередь отчетов | Используется для тестовых сообщений. Очереди отчетов могут быть созданы изменением типа (или категории) общедоступной или частной очереди на предопределенный идентификатор {55EE8F33-CCE9-11CF-B108-0020AFD61CE9}. Очереди отчетов удобны в качестве инструмента тестировании для отслеживания сообщений на их маршруте. |
Системные очереди | Являются частными и используются самой системой Message Queuing. Эти очереди предназначены для административных сообщений, хранения уведомлений и обеспечения правильного порядка доставки транзакционных сообщений. |
Административные инструменты для работы с Message Queuing
Прежде чем переходить к рассмотрению программного взаимодействия с Message Queuing, следует ознакомиться с административными инструментами, которые поставляются в составе операционной системы Windows для создания и управления очередями и сообщениями.
Описанные здесь инструменты применяются для работы не только с Message Queuing. Возможности, касающиеся Message Queuing, становятся доступными в этих инструментах только после установки Message Queuing в системе.
Создание очередей сообщений
Очереди сообщений могут создаваться с помощью оснастки Computer Management (Управление компьютером) консоли управления MMC. В системе Windows 7 оснастку Computer Management можно запустить, выбрав в меню Start (Пуск) пункт Control Panel --> Administrative Tools --> Computer Management (Панель управления --> Администрирование --> Управление компьютером). В панели древовидного представления Message Queuing находится ниже элемента Services and Applications (Службы и приложения).
Выбрав Private Queues (Частные очереди) или Public Queues (Общедоступные очереди), можно создать новую очередь из меню Action (Действие), как показано на рисунке. С общедоступными очередями можно работать, только если Message Queuing сконфигурирована в режиме Active Directory:

Свойства Message Queuing
После создания очереди в оснастке Computer Management можно модифицировать ее свойства, выделив очередь в древовидной панели и выбрав в меню пункт Action --> Properties (Действие --> Свойства):

Здесь для конфигурирования доступно несколько опций:
Label (Метка) — имя очереди, которое может использоваться для ее поиска.
Type ID (Идентификатор типа), который по умолчанию устанавливается в {00000000-0000-0000-0000-000000000000}, для отображения множественных очередей на единственную категорию типа.
Отчетные очереди, как было сказано ранее, используют специфический идентификатор типа. Type ID представляет собой универсальный уникальный идентификатор (UUID) или глобально уникальный идентификатор (GUID).
Специальные идентификаторы типа могут быть созданы утилитами uuidgen.exe или guidgen.exe. Утилита uuidgen.exe — это инструмент командной строки, служащий для создания уникальных идентификаторов, а guidgen.exe — графическая ее версия для создания UUID.
Во избежание переполнения диска, максимальный размер всех сообщений (Limit message storage to (KB)) в очереди может ограничиваться.
Отмеченный флажок Authenticated (Проверка подлинности) позволяет записывать и читать сообщения в очереди только аутентифицированным пользователям.
Опция Privacy Level (Уровень конфидециальности) позволяет шифровать содержимое сообщения. Возможные значения: None (Нет), Optional (Необязательно) или Body (Тело). None означает, что шифрованные сообщения не принимаются, Body — принимаются только шифрованные сообщения, а значение по умолчанию Optional — принимаются те и другие.
Целевое протоколирование может быть сконфигурировано опцией Journal (Журнал). С помощью этой опции обеспечивается сохранение в журнале копий принятых сообщений. Для журнальных сообщений очереди может быть указан максимальный размер занятого дискового пространства. По достижении максимального размера целевой журнал очищается.
При опции конфигурации Multicast (Групповой очереди) можно определить групповой IP-адрес для очереди. Один и тот же групповой IP-адрес может применяться разными узлами в сети, так что сообщение, отправленное по одному адресу, принимается множеством очередей.