Назначение компонента Service Broker

Компонент Service Broker помогает создавать асинхронные слабосвязанные приложения, в которых независимые компоненты совместно выполняют ту или иную задачу. Эти компоненты обмениваются сообщениями, которые содержат данные, необходимые для выполнения задачи. В данном разделе описываются следующие основные принципы компонента Service Broker:

  • диалоги;
  • упорядочение и координация сообщений;
  • асинхронное программирование на основе транзакций;
  • поддержка слабосвязанных приложений;
  • составные части компонента Service Broker.

Диалоги

Работа компонента Service Broker основана на отправлении и получении сообщений. Каждое сообщение является элементом диалога — надежного постоянного канала коммуникации. Каждое сообщение и каждый диалог имеет конкретный тип, за соблюдением которого следит компонент Service Broker, помогая разрабатывать надежные приложения.

Новые инструкции Transact-SQL позволяют приложениям отправлять и получать сообщения с высокой степенью надежности. Приложение отправляет сообщения службе, которая представляет собой набор связанных задач. Приложение получает сообщения из очереди — представления внутренней таблицы.

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

Для защиты конфиденциальных сообщений и управления доступом к службам применяется механизм обеспечения безопасности на основе сертификатов.

Чтобы лучше понять работу компонента Service Broker, можно провести параллель между ним и почтовой службой. Для общения с удаленным от вас коллегой можно использовать письма, отправляя их при помощи почтовой службы, которая сортирует и доставляет письма. Получив очередное письмо, вы достаете его из почтового ящика, читаете, пишете ответ и отправляете новое письмо. Ваш коллега делает то же самое, и это продолжается до завершения диалога. Доставка писем осуществляется «асинхронно», пока вы с коллегой решаете другие задачи.

Два пользователя обмениваются письмами через почтовую службу.

В этом примере письмам соответствуют сообщения компонента Service Broker. Обслуживаемая компонентом Service Broker служба — это адрес, по которому почтовая служба доставляет письма. Очереди — это почтовые ящики, в которых хранятся доставленные письма. Приложения получают сообщения, обрабатывают их и отправляют ответы.

Диалог программы, использующей компонент Service Broker, с другими программами аналогичен доставке писем.

Необязательно точно знать, когда коллеги читают почтовые сообщения и составляют ответы. Точно так же приложению, которое использует компонент Service Broker, необязательно известно, как другая служба обрабатывает сообщение, как оно доставляется или когда другое приложение обрабатывает сообщение.

Упорядочивание и координация сообщений

Такой важный аспект программирования СУБД, как управление очередями, реализован в компоненте Service Broker иначе, чем в традиционных продуктах. Основных отличий два.

  • Очереди компонента Service Broker интегрированы в базу данных.
  • Очереди координируют и упорядочивают связанные сообщения.

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

Инфраструктура Service Broker обеспечивает простой интерфейс Transact-SQL для отправки и получения сообщений, наряду с набором надежных гарантий доставки и обработки сообщений. Service Broker гарантирует, что программа получит каждое сообщение диалога только один раз в том порядке, в котором сообщения были отправлены, а не помещены в очередь. Традиционные системы управления очередями предоставляют сообщения в том порядке, в котором они были помещены в очередь, вследствие чего приложение должно определять порядок сообщений и группировать их должным образом. Компонент Service Broker гарантирует, что два средства просмотра очередей не могут одновременно обработать сообщение из одного диалога или из одной группы связанных сообщений.

Приложение-инициатор начинает диалог для каждой задачи, после чего отправляет сообщение целевой службе. Это сообщение содержит данные, необходимые для выполнения отдельного этапа задачи. Целевая служба получает сообщение. Приложение, обслуживающее целевую службу, обрабатывает сообщение и отправляет ответ службе, инициировавшей диалог. Диалог продолжается некоторое время и завершается в соответствии с правилами, определенными разработчиком.

Компонент Service Broker выполняет наиболее сложные задачи, связанные с подготовкой приложений для обмена сообщениями. Это координация сообщений, надежная доставка сообщений, блокирование сообщений и запуск средств просмотра очереди. Это позволяет разработчикам баз данных сосредоточиться на решении производственных задач.

Асинхронное программирование на основе транзакций

В инфраструктуре компонента Service Broker доставка сообщений приложениям основана на транзакциях и осуществляется асинхронно. Поскольку доставка сообщений компонентом Service Broker основана на транзакциях, при откате транзакции выполняется откат всех относящихся к ней операций компонента Service Broker. К ним относятся и операции отправки и получения. Суть асинхронной доставки сообщений состоит в том, что когда Database Engine осуществляет доставку, работа приложения не прерывается. Ради повышения масштабируемости в компоненте Service Broker реализованы механизмы, которые автоматически запускают программы, обрабатывающие очередь при необходимости. Дополнительные сведения см. в разделе Service Broker Activation.

Асинхронный подход помогает разработчикам писать приложения, работающие с очередями. Многие приложения, работающие с базами данных, включают таблицы, которые, по сути, являются очередями заданий, подлежащих выполнению по мере освобождения требуемых ресурсов. Организация очередей позволяет поддерживать краткое время отклика базы данных на запросы пользователей и вместе с тем эффективно использовать доступные ресурсы. Компонент Service Broker обеспечивает постановку в очередь в качестве важной части компонента Database Engine.

Очереди позволяют приложению выполнять работу с транзакцией, отличной от транзакции, которая запросила выполнение работы. В компоненте Service Broker эта концепция расширена, и приложения могут выполнять работу в другом экземпляре или на другом компьютере. Компонент Service Broker облегчает задачу разработчиков баз данных, предоставляя встроенные функции организации очередей в базе данных и надежный обмен сообщениями между экземплярами на основе транзакций.

Поддержка слабосвязанных приложений

Компонент Service Broker поддерживает слабосвязанные приложения. Такие приложения состоят из нескольких программ, отправляющих и принимающих сообщения независимо друг от друга. Такие приложения должны содержать одинаковые определения для переданных сообщений и должны определять одинаковую структуру для взаимодействия между службами. Однако приложения не обязательно должны выполняться в одно время, выполняться в одном экземпляре SQL Server или иметь общую реализацию. Приложение не нуждается в сведениях о физическом расположении или реализации другого участника диалога.

Компоненты Service Broker

Компонент Service Broker включает в себя компоненты трех типов.

  • Компоненты диалогов. В период выполнения структуру приложения, работающего с компонентом Service Broker, формируют группы сообщений, диалоги и сообщения. В процессе диалога приложения обмениваются сообщениями. Каждый диалог является элементом одной группы сообщений; группа сообщений может включать несколько диалогов. Диалоги Service Broker представляют собой обмен сообщениями строго между двумя участниками. Дополнительные сведения о компонентах диалогов см. в разделе Архитектура диалога.
  • Компоненты определения служб. К этой категории относятся компоненты времени проектирования, определяющие базовую структуру диалогов, в которых приложение может принимать участие. Они определяют для приложения типы сообщений, поток передачи сообщений и базу данных, в которой будут храниться сообщения. Дополнительные сведения о компонентах определения служб см. в разделе Архитектура служб.
  • Сетевые компоненты и компоненты обеспечения безопасности. Эти компоненты определяют инфраструктуру для обмена сообщениями вне экземпляра SQL Server. Чтобы администраторам СУБД было легче управлять изменяющимися средами, компонент Service Broker позволяет конфигурировать эти компоненты независимо от кода приложения. Дополнительные сведения о сетевых компонентах и компонентах обеспечения безопасности см. в разделе Работа в сети и удаленное обеспечение безопасности.

Компоненты определения служб, сетевые компоненты и компоненты обеспечения безопасности входят в метаданные базы данных и экземпляра SQL Server. Группы диалогов, диалоги и сообщения входят в данные, хранимые в базе данных.

См. также

Основные понятия

Масштабируемость компонента Service Broker

Другие ресурсы

Архитектура компонента Service Broker
Service Broker Activation
Факторы безопасности, которые следует учитывать при работе с компонентом Service Broker
Учебники по компоненту Service Broker

Справка и поддержка

Получение помощи по SQL Server 2005