Dynamisches Routing von Service Broker

In den meisten Szenarien verwenden Service Broker-Anwendungen von einem Administrator konfigurierte Routen. In manchen Fällen müssen Sie möglicherweise Routen dynamisch konfigurieren. In diesem Fall implementieren Sie einen Broker-Konfigurationsdienst.

Übersicht über das dynamische Routing

SQL Server stellt keine integrierte Lösung bereit, um Routingtabellen dynamisch zu erstellen. Stattdessen bietet SQL Server Funktionen, mit denen Entwickler Anwendungen für das dynamische Routing erstellen können.

Wenn Service Broker keine Route für eine Konversation finden kann, sucht Service Broker in der Routingtabelle nach einem Dienst namens SQL/ServiceBroker/BrokerConfiguration. Wenn für diesen Dienst ein Eintrag vorhanden ist, erstellt Service Broker eine neue Konversation mit diesem Dienst und sendet eine Nachricht zu dieser Konversation mit der Anforderung, eine Route zu erstellen. Wenn die Konversation mit dem BrokerConfiguration-Dienst endet, versucht Service Broker erneut, die Nachricht weiterzuleiten. Wenn zu diesem Zeitpunkt keine Route vorhanden ist, markiert Service Broker alle Nachrichten für die Konversation als DELAYED. Nach einem bestimmten Timeoutzeitraum fordert Service Broker eine Route vom BrokerConfiguration-Dienst an.

Erstellen des Broker-Konfigurationsdienstes

Um einen Dienst für das dynamische Routing zu erstellen, müssen Sie einen Dienst namens SQL/ServiceBroker/BrokerConfiguration erstellen, der Konversationen zum Vertrag https://schemas.microsoft.com/SQL/ServiceBroker/BrokerConfigurationNotice annimmt. Danach erstellen Sie eine Route zu dem Dienst in der Routingtabelle für Datenbanken, die das dynamische Routing verwenden.

Die Routenanforderungen verwenden den Nachrichtentyp https://schemas.microsoft.com/SQL/ServiceBroker/BrokerConfigurationNotice/MissingRoute. Die Nachricht liegt im XML-Format vor und enthält den Namen des Dienstes, für den Routinginformationen verfügbar sein sollten.

Die folgende Nachricht ist z. B. eine Anforderung für eine Route zum Dienst http://Adventure-Works.com/Elsewhere:

<MissingRoute xmlns="https://schemas.microsoft.com/SQL/ServiceBroker/BrokerConfigurationNotice/MissingRoute">
  <SERVICE_NAME>http://Adventure-Works.com/Elsewhere</SERVICE_NAME>
</MissingRoute>

Weitere Informationen finden Sie unter Service Broker-Konfigurationsdienst.

Implementieren des dynamischen Routings

Der größte Aufwand beim Implementieren des dynamischen Routings besteht in der Ermittlung der Adresse für den Dienstnamen. Sie können jede beliebige, für Ihre Anwendung geeignete Methode verwenden.

Die Verantwortlichkeiten der Anwendung für den Broker-Konfigurationsdienst sind einfach. Die Anwendung liest eine MissingRoute-Nachricht aus der Warteschlange. Wenn die Anwendung die Adresse für den Dienst ermitteln kann, erstellt die Anwendung eine Route für den Dienst und beendet die Konversation dann. Wie die Anwendung die Adresse ermittelt, richtet sich nach den speziellen Anforderungen Ihrer Umgebung. Die Anwendung kann z. B. einen externen Dienst fragen, eine Abfrage in einer anderen Datenbank ausführen oder eine Route zu einem Service Broker erstellen, der für die Nachrichtenweiterleitung konfiguriert ist. Wenn die Anwendung die Adresse für den Dienst jedoch nicht ermitteln kann, beendet sie die Konversation mit einem Fehler.

Beachten Sie, dass die Anwendung, die den Broker-Konfigurationsdienst implementiert, in beiden Fällen die Konversation beendet. Service Broker sendet unabhängig von der Anzahl der Konversationen mit dem Dienst jeweils eine MissingRoute-Nachricht für einen bestimmten Dienst. Zudem verwendet Service Broker den größtmöglichen Timeoutwert für Anforderungen an den Broker-Konfigurationsdienst. Wenn aus diesem Grund der Broker-Konfigurationsdienst die Konversation nicht beendet, erstellt Service Broker keine neue Anforderung an den Dienst. Wenn der Broker-Konfigurationsdienst keine Route erstellt hat oder die Lebensdauer der Route, die vom Dienst erstellt wurde, abläuft, bleiben die Nachrichten an den Dienst so lange verzögert, bis die Lebensdauer der Konversation abläuft.

Siehe auch

Konzepte