SQL Server 2000 DTS. Часть 11. Задачи DTS Designer. Задача Message Queue

ПУБЛИКАЦИИ  

По материалам статьи Marcin Policht: SQL Server 2000 DTS Part 11 - DTS Designer Tasks - the Message Queue task

В этой статье мы рассмотрим задачу - Message Queue. Однако, прежде чем мы приступим к описанию этой задачи, её особенностей и пример её использования, давайте сначала затратим немного времени на изучение понятия очередей сообщений и специфику реализации таких очередей в концепции Microsoft.
Главной целью при организации очередей сообщений является обеспечение надежного обмена данными между распределенным (включая гетерогенные) системами, которые не могут одновременно работать с одним и тем же ресурсом. Очереди применяются в тех случаях, когда необходимая для работы информация запрашивается из источника данных, но нет гарантии её доставки из-за возможных проблем со связью или временной недоступностью получателя данных. Так же, очереди позволяют преодолевать различия в механизмах обработки сообщений разными системами, и снижают риски чрезмерной утилизации ресурсов получателя сообщений из-за большого их числа. Управляемые очереди позволяют балансировать нагрузку в конфигурациях, где несколько получателей могут работать с одной очередью и обрабатывать любое сообщение из этой очереди.
Очереди сообщений появились в Windows NT 4.0 в составе дополнения Option Pack, а в Windows 2000 они уже были включены как стандартный компонент операционной системы (доступный в апплете Add/Remove Programs в Control Panel). Инсталляция очередей в Windows XP состоит из следующих элементов:

  • Active Directory Integration (для компьютеров, входящих в Active Directory домен Windows 2000/2003) - обеспечивает представление public - очередей сообщений (в противоположность private - очередям, которые не представлены в Active Directory) как узлов объектов, располагающихся под узлом Active Directory MSMQ.
  • Common - содержит основные функциональные возможности и распределяет локальную память для сообщений.
  • MSMQ HTTP Support - позволяет посылать и получать сообщения по протоколу HTTP (параметры настройки proxy с перестраиваемой в утилите proxycfg.exe конфигурацией). Эта опция использует расширение Message Queuing ISAPI, имеющееся в составе Internet Information Server (управляется посредством MMC консоли IIS Administrator).
  • Triggers - позволяет вызывать исполнение кода COM компонент (или исполнение программ) в ответ на полученное сообщение.

Инсталляция всех компонент создает две службы - Message Queuing и Message Queuing Triggers, а также регистрирует Message Queuing в базе данных Active Directory. Вы можете увидеть это, открыв Active Directory Users and Computers, и выбрав пункты "Advanced Features" и "Users, Groups, and Computers as containers" в меню View, что бы отобразить на экране состав объектов компьютера, на котором была установлена поддержка очередей Message Queuing. Обратите внимание, что компьютер, как объект, содержит подобъект MSMQ. Каждая public - очередь сообщений, которую Вы определяете в поддерживающей Message Queuing системе, будет иметь соответствующий объект public - очереди, находящийся в узле MSMQ.
Чтобы устанавливать Message Queuing на Windows 2003 сервере, запустите Windows Component Wizard (нажав кнопку Add/Remove Windows Components), входящий в утилиту Add or Remove Programs из состава Control Panel. В первом окне мастера перейдите на узел Application Server и нажмите кнопку Details, чтобы отобразились все его подкомпоненты, и там Вы сможете выбрать опцию Message Queuing. В дополнение к компонентам, доступным в Windows XP, для этой операционной системы Вы сможете установить:

  • Downlevel Client Support - обеспечивает поддержку Active Directory для клиентов не поддерживающих AD. Это может потребовать изменения разрешений в Active Directory, если служба Message Queuing такого клиента работает в контексте безопасности учетной записи локальной системы.
  • Routing Support - включает механизм промежуточного накопления и маршрутизации сообщений, использующий хранящуюся в Active Directory информацию.

Самым распространённым сценарием использования очередей сообщений в Data Transformation Services является использование одного DTS пакета для формирования очереди сообщений - Queue Sender, а другого пакета для получения сообщений из очереди - Queue Receiver. Используется также промежуточная система, обеспечивающая сервис Message Queuing. Обычно каждый из этих компонент находится на отдельном компьютере, но Вы можете разместить их всех и на том же компьютере, где работает SQL Server 2000. Независимо от того, какую Вы выбрали конфигурацию, компоненты Message Queuing нужно установить на промежуточном сервере. Чтобы использовать интеграцию с Active Directory и public - очереди, этот компьютер должен быть в Active Directory домене. После завершения инсталляции Message Queuing, откройте на локальном компьютере MMC консоль Computer Management. Найдите узел Message Queuing, который числится среди узлов Services and Applications. Здесь Вы можете создавать private и public очереди сообщений (если была установлена интеграция с Active Directory). Для последующего ниже примера, создайте одну public и одну private очередь, с именами SQLPublic и SQLPrivate соответственно. Это можно сделать, нажав правую кнопку мыши на папке верхнего уровня очередей (Public или Private) и выбрав New в контекстном меню. Обратите внимание, что public - очередь будет представляться простым именем (имя компьютера), в то время как private имеет дополнительный элемент (private$). Например, если сервер называется MRBIG, очереди будут иметь имена MRBIG\SQLPublic и MRBIG\private$\SQLPrivate. Также, Вы увидите опцию создания транзакционной очереди, но в нашем случае, это не потребуется. Создание public - очереди также приведет к тому, что в Active Directory под узлом MSMQ компьютера MRBIG появится объект SQLPublic.
Далее, в SQL Server Enterprise Manager на SQL Server, используемый в качестве отправителя сообщений, запустите DTS Designer. Создайте новый пакет с именем "MQ Sender" и добавьте в него одну - единственную задачу Message Queue (из меню Task или перетащите с левой инструментальной панели). В диалоговом окне Properties задачи Message Queue Task, впишите описание (например "Send private"), из раскрывающегося списка Message выберете Send message, и укажите в качестве имени очереди: MRBIG\private$\SQLPrivate. В области Messages to be sent, создайте следующие типы сообщений:

  • String Message - обычно используется для уведомления получателя об определенных событиях. В нашем случае, просто напишите "Moe", как содержание сообщения.
  • Global Variable Message - обычно используется для обмена данными между двумя пакетами. В нашем случае, создайте новую глобальную переменную (кнопка "Create Global Variable" доступна в том же самом диалоговом окне) с именем gvMQPriv, типом String и значением "LARRY"
  • Data File Message - обычно используется для отсылки файлов компьютеру-получателю. В нашем случае, создайте текстовый файл в каталоге C:\Windows, и назовите его "Curly.txt". Для нашего примера, его содержание является несущественным.

Вы легко можете убедиться в том, что для каждого типа сообщений можно определить критерии фильтрации в получающем сообщения пакете, которые помогают определять, было ли получено ожидаемое сообщение. Сохраните пакет, выполните его и убедитесь, что Вы получили подтверждение его успешного исполнения. Повторно откройте узел Message Queuing в MMC консоли Computer Management и проверьте содержимое частной очереди SQLPrivate. Обратите внимание, что она содержит три сообщения, которые Вы определили в DTS пакете "Send private".
Вы легко можете создать необходимый для этого пакет (или использовать тот же пакет, только добавив ещё одну задачу Message Queue Task), которая будет посылать те же самые три типа сообщений в public - очередь. Чтобы сделать это, Вы должны определить получающую сообщения очередь как MRBIG\SQLPublic. Кроме того, в отличие от частных очередей, во время выполнения пакета Вы должны иметь возможность обращаться к информации, хранимой в Active Directory. Поэтому важно убедиться, что Вы имеете устойчивую связь с одним из контроллеров домена Windows 2000/2003.
Теперь, когда сообщения сохранены в соответствующих очередях, давайте рассмотрим способ их получения. Запустите DTS Designer в Enterprise Manager получающего сообщения SQL Server и создайте новый пакет с именем "MQ Receiver". Добавьте в него три задачи Message Queue Task. Для каждой из них выберите из раскрывающегося списка опцию "Receive messages", установите название очереди как MRBIG\private$\SQLPrivate, и укажите следующие описания и параметры конфигурации:

  • "Receive private string" - в списке Message type выберите "String Message". Вам будет предложено несколько вариантов фильтрации - None, Exact match, Ignore case и Containing. None не будет фильтровать ни какие принимаемые строки сообщения из частной очереди, которую Вы определили, в то время как остальные три будут сравнивать строки с текстом, указанным в текстовое поле Compare string. Вы можете экспериментировать с каждым из этих вариантов, набрав например: "Moe", "moe", "Mo", или выбрать None.
  • "Receive private global variable" - в списке Message type выберите "Global Variable Message". Здесь также имеется несколько вариантов фильтрации - No filter, From package и From Version. Последние два позволяют Вам подсоединяться к SQL Server, на котором был определен DTS пакет "Send private", выбрать хранилище пакетов (SQL Server, SQL Server Meta Data Services или Structured Storage File) и выбрать имя пакета или его необходимую версию. В нашем случае, просто выберите DTS пакет "Send private".
  • "Receive private file" - в списке Message type выберите "Data File Message", введите имя файла в текстовое поле "Save file as" (например: "CurlyOut.txt"), и пометьте переключатель, указывающий на то, должен ли конечный файл быть перезаписан, если такой уже существует. Вы увидите те же самые три варианта фильтрации, которые были у типа сообщений "Global Variable Message". Чтобы завершать настройку, укажите в качестве DTS пакета - "Send private", как это было сделано выше.

Для каждого типа сообщений Вы можете определить необходимость удаления обработанных сообщений из очереди (мы будем использовать значение по умолчанию, которое предписывает удаление таких сообщений) и время ожидания, определяющее как долго DTS задача будет ожидать обработки и фильтрации сообщения, пред отказом (по умолчанию, не устанавливается никакого времени ожидания). Как только все задачи будут настроены, сохраните пакет, выполните его и проверьте, что он был успешно исполнен. Если Вы проверите содержимое частной очереди SQLPrivate в узле Message Queuing MMC консоли Computer Management, Вы увидите, что все сообщения были удалены (после установки флага "Remove from message queue" в диалоговом окне Properties задачи Message Queue Task, что мы только что настроили).

В DTS, задача Message Queue Task не выполняет никакого преобразования (она предназначена для надежной передачи данных между базами) и обычно является дополнительным компонентом многозадачных DTS пакетов. Для рассмотрения более сложных примеров, обратитесь к Books Online. Также, Вы можете найти много полезной информации о Microsoft Message Queuing на сайте Microsoft Message Queuing Center.

[В начало]    [К следующей статье цикла]


Перевод: Александра Гладченко  2004г.

ПУБЛИКАЦИИ

Скачать электронную карту Ангарска бесплатно
Сайт управляется системой uCoz