Устранение неполадок маршрутизации и доставки сообщений

В этом разделе представлены предложения по устранению распространенных симптомов, связанных с неполадками маршрутизации и доставки сообщений.

Симптом: сообщения остаются в очереди передачи

Убедитесь, что в базе данных активирована доставка сообщений с помощью компонента Service Broker. Столбец is_broker_enabled таблицы sys.databases, как демонстрирует следующий пример, показывает, активирована ли доставка сообщений с помощью компонента Service Broker:

SELECT is_broker_enabled FROM sys.databases
WHERE database_id = DB_ID() ;

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

Если доставка сообщений компонентом Service Broker активна, проверьте столбец transmission_status в представлении каталога sys.transmission_queue для сообщений. В число самых распространенных ошибок входят следующие.

Сообщение Описание

Отсутствует маршрут для службы.

Компоненту Service Broker не удается найти маршрут к заданной службе.

Конечный экземпляр компонента Service Broker недоступен.

Компоненту Service Broker не удается доставить сообщение целевому экземпляру компонента Service Broker.

Транспортный уровень недоступен.

В экземпляре отсутствует конечная точка компонента Service Broker, или не удалось запустить конечную точку компонента Service Broker.

Целевая очередь отключена.

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

Ошибка при получении данных: «10054 (Существующее соединение было принудительно закрыто удаленным узлом.)».

Удаленная сторона диалога приняла соединение TCP/IP, но закрыла его, прежде чем разрешила отправку сообщения.

(Нет)

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

Симптом: маршрут существует, состояние передачи показывает отсутствие маршрута для службы

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

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

SELECT N'No Exact Match' = tq.to_service_name
FROM sys.transmission_queue AS tq
WHERE NOT EXISTS
    (SELECT remote_service_name
     FROM sys.routes AS routes
     WHERE tq.to_service_name = routes.remote_service_name) ;

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

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

Убедитесь, что не истек срок действия маршрута. Столбец времени действия представления каталога sys.routes содержит дату и время истечения срока действия маршрута.

Симптом: состояние передачи показывает недоступность целевого экземпляра компонента Service Broker

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

Симптом: состояние передачи показывает недоступность транспортного уровня

Проверьте, существует ли конечная точка компонента Service Broker и установлено ли для нее состояние STARTED. Если нет, создайте конечную точку. Дополнительные сведения о конечных точках Service Broker см. в разделе Конечные точки компонента Service Broker. Дополнительные сведения о создании конечной точки см. в разделе Как активировать поддержку сети компонента Service Broker (Transact-SQL).

Симптом: состояние передачи показывает: «Существующее соединение было принудительно закрыто удаленным узлом»

Возможно, неправильно настроена безопасность транспорта, или TCP/IP-адрес маршрута указывает порт, который используется любой другой службой, кроме компонента Service Broker. Обратите внимание, что компонент Service Broker не использует протокол потока табличных данных. В маршруте должен быть указан порт, соответствующий тому, который используется конечной точкой компонента Service Broker в удаленном экземпляре SQL Server.

Проверьте конфигурацию конечной точки компонента Service Broker, чтобы убедиться, что оба экземпляра имеют совместимые сетевые настройки безопасности. Если в конечной точке компонента Service Broker для одного экземпляра указан параметр REQUIRED или ENABLED, конечная точка компонента Service Broker другого экземпляра не может указывать значение NONE.

Проверьте сертификаты, пользователей и разрешения для безопасности транспорта компонента Service Broker. Конфигурация безопасности транспорта объясняется в разделе Безопасность транспорта компонента Service Broker.

См. также

Задачи

Как активировать поддержку сети компонента Service Broker (Transact-SQL)

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

Маршрутизация и работа в сети компонента Service Broker
Конечные точки компонента Service Broker
Маршрутизация компонента Service Broker
Запуск и остановка очереди

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

sys.databases (Transact-SQL)
sys.transmission_queue (Transact-SQL)
sys.routes (Transact-SQL)
sys.service_broker_endpoints (Transact-SQL)

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

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