Архитектура Message Queuing

156

В Message Queuing сообщения записываются и читаются из специальной очереди сообщений. Сами сообщения и очереди сообщений имеют несколько атрибутов, которые требуют пояснений.

Сообщения

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

Очереди сообщений содержат сообщения нескольких типов:

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

Сообщения имеют два режима доставки: экспресс (express) и восстановимый (recoverable). Экспресс-сообщения доставляются очень быстро, потому что в качестве хранилища очереди используется оперативная память. Восстановимые сообщения сохраняются в файлах на каждом шаге маршрута — до тех пор, пока они не будут доставлены. Таким образом, доставка сообщений гарантируется, даже если компьютер будет перегружен или произойдет сбой сети.

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

Очередь сообщений

Очередь сообщений представляет собой своего рода "накопительный бункер" для сообщений. Сообщения, сохраняемые на диске, размещаются в каталоге <windows>\system32\msmq\storage.

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

Типы очередей сообщений MSMQ
Тип очереди Описание
Общедоступная (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 (Действие --> Свойства):

Окно свойств очереди

Здесь для конфигурирования доступно несколько опций:

Пройди тесты
Лучший чат для C# программистов