Шрифт:
Интервал:
Закладка:
Позже он может подключить свой компьютер к сети, и все аккумулированные вызовы поступят к удаленным асинхронным компонентам.
Технология асинхронных компонент основана на технологии MSMQ (Microsoft Message Queuing), которая для полноты изложения и рассматривается кратко в следующем разделе (изложение основано на статье David Chappell "Microsoft Message Queue Is a Fast, Efficient Choice for Your Distributed Applications" в MSJ, July 1998 и материалах из MSDN).
MSMQ
Синхронная коммуникация удаленных клиента и сервера в СОМ+ основана на использовании протокола DCOM — объектно-ориентированной версии RPC. MSMQ предоставляет новую возможность — обмен сообщениями. Эта технология имеет следующие преимущества:
• Отправитель сообщения не блокируется в ожидании ответа от получателя.
• Отправитель и получатель могут работать в различные непересекающиеся интервалы времени.
• Отправитель может направить сообщение сразу же целой группе получателей.
• Сообщение можно сохранить на диске и повторить его обработку при сбое.
• Возможна пересылка сообщений по цепочке (аналог делегирования).
Таким образом, MSMQ (вместе с другими подобными технологиями) представляет особую парадигму проектирования распределенных систем. В качестве примера можно напомнить, что обмен сообщениями используется в распределенных вычислениях (MPI в кластерах ЭВМ). Можно предположить, что основанные на сообщениях технологии будут особенно популярны при проектировании распределенных систем на уровне выше предприятия, т. е. систем, отдельные части которых слабо или вообще не связаны друг с другом организационно.
Основными элементами технологии MSMQ являются:
• API, используемый приложением для отправки и получения сообщений
Данный API имеется в двух видах: множество С функций и множество СОМ объектов. MSMQ API обеспечивает следующие возможности:
♦ Создание и уничтожение очереди сообщений
♦ Открытие и закрытие существующей очереди сообщений
♦ Получение сообщения из очереди синхронно, асинхронно, с удалением из очереди, чтение некоторых элементов сообщения без удаления его из очереди и т. п.
• Сообщение
Многое о возможностях MSMQ можно узнать просто просмотрев список свойств, которые могут быть приписаны сообщению. Эти свойства хранятся в специальной структуре, передаваемой как входной параметр в API функции, связанные с отправлением и получением сообщения. Рассмотрим некоторые из этих свойств:
♦ Body
Здесь размещается основное содержание сообщения (объемом до 4 МЬ). Передавать можно даже СОМ объект, поддерживающий интерфейс IPersistStream, методы которого позволяют записать состояние объекта в некоторый поток, а затем восстановить объект, инициировав его данными из потока,
♦ Арр Specific
Это свойство можно использовать для передачи специфичной для приложения информации. Так как отдельные свойства сообщения можно просматривать не извлекая сообщение из очереди, наличие такого поля весьма полезно при программировании сложной бизнес-логики.
♦ Delivery
Данное свойство определяет, где очередь должна хранить данное сообщение — на диске (значение Express), либо в оперативной памяти (значение Recoverable). В последнем случае сообщение не пропадет если, например, произойдет отключение питания. Но в первом случае минимизируются накладные расходы. Time То Be Received
Это похоже на параметр "время жизни" пакета в IP протоколе. Данный параметр задает число секунд, в течении которых сообщение должно быть получено адресатом. По истечении заданного времени MSMQ автоматически уничтожит сообщение.
♦ Time То Reach Queue
Отправитель сообщения всегда отправляет его в некоторую очередь (очередь назначения), из которой это сообщение должен забрать уже получатель. Заметим, что в процессе передачи сообщения от отправителя до очереди назначения сообщение может временно храниться в другой очереди (например, на машине отправителя, если в данный момент очередь назначения недоступна). Данный параметр задает число секунд, в течении которых сообщение должно достигнуть очереди назначения. По истечении указанного времени MSMQ уничтожит это сообщение, если оно не успеет дойти до очереди назначения.
♦ Acknowledge
Задавая подходящее значение для этого параметра, отправитель может потребовать от MSMQ автоматически уведомить его о получении сообщения, о записи сообщения в очередь назначения, об уничтожении сообщения по той или иной причине.
♦ Admin Queue
Здесь можно задать так называемую административную очередь, в которую MSMQ будет направлять уведомления, тип которых задан в свойстве Acknowledge.
♦ Arrived Time
В этом свойстве MSMQ сохраняет момент времени, в который сообщение достигло очереди назначения.
♦ Journal
используя этот параметр отправитель может потребовать сохранение копии сообщения в специальной очереди на своей машине (в любом случае, в случае недостижимости получателя).
♦ Priority
Приоритет сообщения учитывается при его маршрутизации и при размещении в очереди.
♦ Response Queue
Здесь можно указать имя очереди на стороне отправителя, в которую он хотел бы получить ответ от получателя сообщения (если, конечно, получатель пожелает отправить ответ).
♦ Message ID
Данный идентификатор формируется автоматически. Получатель сообщения, желающий послать ответ, может указать этот идентификатор в свойстве Correlation ID, связывая тем самым ответ с полученным сообщением.
♦ Correlation ID
При отправке ответа на полученное сообщение здесь следует указать значение свойства Message ID полученного сообщения.
Ряд свойств, приписываемых сообщению, связан с аутентификацией и шифрованием сообщений. Эти вопросы излагаются далее без упоминания имен соответствующих свойств. Предварительно стоить заметить, что эти же вопросы решаются системой безопасности СОМ+, но только для случая синхронных вызовов, т. к. вся система аутентификации, основанная на Kerberos или NT LAN Manager, основана на синхронной коммуникации клиента и сервера. Технология асинхронных компонент требует использования новой системы аутентификации.
Аутентификация позволяет получателю сообщения быть уверенным в том, что данное сообщение послано именно данным отправителем и в процессе передачи в сообщение не были внесены никакие искажения (целостность сообщения). Шифрование сообщения (его тела — Body) позволяет защитить передаваемую информацию от несанкционированного просмотра.
Аутентификация выполняется по запросу отправителя. Соответствующее требование задается в свойстве Auth Level, где определяется и тип электронной подписи, которую следует использовать при аутентификации в зависимости от типа сообщения.
Что делает MSMQ на стороне отправителя при запросе:
♦ Получает сертификат от приложения-отправителя
В простейшем случае, когда сообщение пересылается в рамках одного Windows 2000 домена, используется так называемый внутренний сертификат, включающий SID отправителя и его публичный ключ. Если сообщение пересылается за пределы одного домена, используется так называемый внешний сертификат, содержащий специфичную для конкретного способа аутентификации информацию. В этом случае аутентификация выполняется самим приложением-получателем, а не менеджером очереди назначения, как это происходит при использовании внутреннего сертификата. Далее мы не будем рассматривать этот случай.
Сертификат прикрепляется к сообщению и используется менеджером очереди назначения при аутентификации полученного сообщения. До использования сертификата он должен быть зарегистрирован его владельцем в Active Directory данного домена.
♦ Получает личный ключ отправителя
Этот ключ, конечно, не будет отправляться в сообщении. Он будет использоваться при генерации цифровой подписи, которой будет подписано отправляемое сообщение.
♦ Вычисляет хешированное значение сообщения
Одно из свойств сообщения определяет алгоритм хеширования, который