Service Broker-Routing

In diesem Thema wird ausführlich beschrieben, wie Nachrichten von Service Broker weitergeleitet werden. Eine Übersicht finden Sie unter Routen.

Bei den meisten Anwendungen ist ein einfacher Ansatz für das Service Broker-Routing geeignet. Geben Sie in jeder Datenbank, die einen Dienst enthält, eine Route für die externen Dienste an, mit denen der Dienst kommuniziert. In Service Broker wird jedoch ein hoch entwickeltes Routingsystem für Fälle bereitgestellt, in denen eine Anwendung ein komplexeres Verhalten benötigt. Beispiele, in denen der Routingprozess veranschaulicht wird, finden Sie unter Service Broker-Routingbeispiele.

Beschreibung des Routingprozesses

SQL Server verwaltet zwei unterschiedliche Ebenen von Routinginformationen. Jede Datenbank enthält eine lokale Routingtabelle, sys.routes, für in dieser Datenbank begonnene Konversationen. Bei Konversationen, die aus der SQL Server-Instanz stammen, durchsucht SQL Server die Routingtabelle in der Datenbank, von der die Konversation erstellt wurde. Bei Konversationen, die von außerhalb der Instanz eingehen, durchsucht SQL Servermsdb.sys.routes.

Der allgemeine Abgleichungsprozess ist immer derselbe, unabhängig davon, ob die Konversation Ihren Ursprung innerhalb oder außerhalb der Instanz hat. Abgelaufene Routen werden dabei ignoriert. Der Routingprozess besteht aus drei unterschiedlichen Schritten:

  1. Suchen von übereinstimmenden Routen. Service Broker sucht durch Abgleichen des Dienstnamens und des Service Broker-Bezeichners eine Gruppe möglicher Routen.

  2. Auswählen einer Route. Von Service Broker wird eine Route aus einer Gruppe möglicher Routen ausgewählt.

  3. Suchen des Zieldienstes. Wenn in der ausgewählten Route 'LOCAL' als Netzwerkadresse angegeben ist, wird der Dienst von Service Broker innerhalb der Instanz gesucht. Wenn der Dienst nicht in der Instanz vorhanden ist, wird von Service Broker möglicherweise zu Schritt 2 zurückgekehrt und eine andere Route ausgewählt.

Sobald eine Nachricht vom Initiator an das Ziel gesendet wurde und der Initiator eine Bestätigungsnachricht vom Ziel erhält, verwendet der Initiator den Service Broker-Bezeichner in den Bestätigungsnachrichten, um nachfolgende Nachrichten an dasselbe Ziel weiterzuleiten. In Service Broker werden Bestätigungsnachrichten verarbeitet. Der Prozess ist für eine Anwendung transparent, von der Service Broker verwendet wird. Weitere Informationen zu Bestätigungsnachrichten finden Sie unter Service Broker-Kommunikationsprotokolle.

Antwortnachrichten von einem Zieldienst

Wenn eine von außerhalb der Instanz eingehende Nachricht von einem Zieldienst stammt, überprüft SQL Server, ob die aktuelle Instanz den Service Broker-Bezeichner in der Nachricht enthält. Wenn dies der Fall ist, wird die Nachricht innerhalb der aktuellen Instanz übermittelt, wie im Abschnitt "Suchen des Zieldienstes" beschrieben. Andernfalls führt SQL Server den Standardabgleichungsprozess aus.

Suchen von übereinstimmenden Routen

Im folgenden Verfahren wird das Abgleichen von Routen in SQL Server beschrieben. Der Abgleichungsprozess endet bei jedem Schritt, wenn mindestens eine Route übereinstimmt, und von Service Broker wird eine der übereinstimmenden Routen ausgewählt:

  1. Wenn durch die Konversation ein Service Broker-Bezeichner angegeben wird, wird eine Route mit einer genauen Übereinstimmung sowohl hinsichtlich des Dienstnamens als auch des Service Broker-Bezeichners gesucht.

  2. Bei Routen, durch die kein Service Broker-Bezeichner angegeben wird, wird eine genaue Übereinstimmung mit dem Dienstnamen gesucht.

  3. Wenn durch die Konversation kein Service Broker-Bezeichner angegeben wird, wird bei Routen, durch die ein Service Broker-Bezeichner angegeben wird, eine genaue Übereinstimmung mit dem Dienstnamen gesucht. Falls die Routingtabelle Routen enthält, die mit dem Dienstnamen übereinstimmen und verschiedene Service Broker-Bezeichner aufweisen, können Sie einen beliebigen Service Broker-Bezeichner auswählen. Ordnen Sie dann nur die Routen zu, die diesen Service Broker-Bezeichner verwenden.

  4. Wenn eine Route zu einem dynamischen Routingdienst vorhanden ist und keine Anforderung einer Route zu dem Dienst aussteht, wird die Konversation als verzögert gekennzeichnet, und es werden Routinginformationen vom betreffenden Dienst angefordert.

  5. Es wird eine Route gesucht, die weder den Dienstnamen noch den Service Broker-Bezeichner angibt.

  6. Wenn die Konversation einen Service Broker-Bezeichner angibt und wenn die Instanz eine oder mehrere Datenbanken enthält, die Dienste mit Namen enthalten, die mit dem in der Konversation angegebenen Namen übereinstimmen, wird die Konversation so weitergeleitet, als würde die Routingtabelle eine Route mit dem Dienstnamen und der Netzwerkadresse 'LOCAL' enthalten.

  7. Die Konversation wird als verzögert gekennzeichnet.

Wenn eine Konversation als verzögert gekennzeichnet wird, wird der Abgleichungsprozess von Service Broker nach einer Timeoutperiode erneut ausgeführt. Wird keine übereinstimmende Route gefunden, gilt dies nicht als Fehler.

Auswählen einer Route

Wenn beim Abgleichungsprozess mehr als eine übereinstimmende Route gefunden wird, wird von Service Broker eine Route aus den übereinstimmenden Routen ausgewählt. Zu diesem Zweck werden Routen, die denselben Service Broker-Bezeichner, denselben Dienstnamen und dieselbe Netzwerkadresse aufweisen, als identisch gewertet. Von Service Broker wird das folgende Verfahren verwendet, um die genaue Route auszuwählen. Bei jedem Schritt wird der Prozess mit dem nächsten Schritt fortgesetzt, wenn keine Routen vorhanden sind, die mit der Adressangabe für den Schritt übereinstimmen.

  1. Es wird eine Route aus den Routen ausgewählt, durch die eine Spiegeladresse angeben wird.

  2. Es wird eine Route aus den Routen ausgewählt, durch die 'LOCAL' als Netzwerkadresse angeben wird. Wenn diese SQL Server-Instanz keinen Dienst enthält, der mit dem in der Konversation angegebenen Namen übereinstimmt, wird der Vorgang mit Schritt 3 fortgesetzt.

  3. Es wird eine Route aus den Routen ausgewählt, durch die eine Netzwerkadresse angeben wird.

  4. Es wird eine Route aus den Routen ausgewählt, durch die 'TRANSPORT' als Netzwerkadresse angeben wird.

Wenn die Brokerweiterleitung nicht aktiviert ist, wird die Nachricht von Service Broker gelöscht, wenn die Konversation ihren Ursprung nicht innerhalb der aktuellen Instanz hat und die Adresse der ausgewählten Route nicht 'LOCAL' ist.

Suchen des Zieldienstes

Wie oben beschrieben, werden Nachrichten von Service Broker an einen Dienst in der aktuellen Instanz übermittelt, wenn durch die übereinstimmende Route 'LOCAL' als Netzwerkadresse angegeben wird. Bei Nachrichten, die von außerhalb der Instanz stammen, muss die Route in msdb.sys.routes enthalten sein. Bei Nachrichten, die von innerhalb der Instanz stammen, muss die übereinstimmende Route für die Tabelle, die die Konversation einleitet, in der Tabelle sys.routes enthalten sein.

Sobald von Service Broker bestimmt wird, dass sich der Dienst für die Nachricht in der aktuellen Instanz befindet, muss der Dienst von Service Broker innerhalb der Instanz gesucht werden. Wenn ein Service Broker-Bezeichner für die Konversation entweder in der Konversation oder der Route vorhanden ist, werden von Service Broker Nachrichten an die durch den Service Broker-Bezeichner identifizierte Datenbank übermittelt.

Andernfalls sucht Service Broker den Dienst zunächst, indem er nach dem Dienstnamen in der Datenbank sucht, die die Konversation enthält. Anschließend sucht er in den anderen Datenbanken in der Instanz nach dem Dienstnamen. Service Broker übermittelt die Nachricht an den ersten gefundenen Dienst. Beachten Sie jedoch, dass die anderen Datenbanken in einer Instanz in keiner bestimmten Reihenfolge von Service Broker durchsucht werden, sodass die Reihenfolge von Konversation zu Konversation variieren kann. Dies bedeutet, dass der Zieldienst von Service Broker zufällig ausgewählt wird, wenn mehr als eine Kopie des Zieldienstes in der Instanz vorhanden ist.

Weitere Überlegungen

Für verbesserte Zuverlässigkeit schließt das Service Broker-Routing Vorkehrungen gegen Routingschleifen ein. Das Service Broker-Routing berücksichtigt Datenbankspiegelungen und kann Konversationen transparent zum aktiven Partner einer gespiegelten Datenbank umleiten.

Routingschleifen

Bei der Service Broker-Nachrichtenweiterleitung wird die Häufigkeit, mit der eine Nachricht weitergeleitet wurde, als Schutz vor endlosen Routingschleifen nachverfolgt. Weitere Informationen finden Sie unter Service Broker-Nachrichtenweiterleitung.

Wenn die übereinstimmende Route eine Netzwerkadresse enthält, deren Auflösung die aktuelle Instanz ergibt, wird die Konversation von SQL Server so behandelt, als würde sie ihren Ursprung außerhalb der Instanz haben. Nachrichten für die Konversation werden von Service Broker mithilfe der Routen in msdb.sys.routes weitergeleitet. Das Routing dieser Nachrichten ist mit dem Routing von Nachrichten von außerhalb der Instanz identisch. Die Nachrichtenweiterleitung muss aktiviert sein, damit die Nachricht von Service Broker an eine andere Netzwerkadresse als 'LOCAL' weitergeleitet werden kann.

Spiegeladressen

Routen mit Spiegeladressen weisen die höchste Vorrangigkeit auf, wenn eine Route aus der anfänglichen Gruppe übereinstimmender Routen ausgewählt wird. Allerdings werden Spiegeladressen von Service Broker bei der Suche nach übereinstimmenden Routen für eine Konversation nicht besonders berücksichtigt.

Wenn Service Broker eine Route auswählt, durch die eine Spiegeladresse angegeben wird, und zuvor noch keine Nachricht mithilfe der Route von Service Broker zugestellt wurde, sendet Service Broker eine Anforderung an beide Adressen, um zu ermitteln, welche Instanz derzeit der Prinzipal ist. Sobald Service Broker den Prinzipal identifiziert hat, werden alle Nachrichten von Service Broker gesendet, die die Route zum Prinzipal verwenden, ohne die Spiegelinstanz zu kontaktieren. Ist der Prinzipal nicht erreichbar oder gibt diese Instanz an, dass er nicht länger Prinzipal ist, sendet Service Broker Nachrichten an die andere Adresse des Paares, wenn die SQL Server-Instanz unter der anderen Adresse angibt, dass sie der neue Prinzipal ist.

In Fällen, in denen Service Broker den Prinzipal nicht erreichen kann, aber der Partner nicht beansprucht, der neue Prinzipal zu sein, sendet Service Broker diesem keine Nachrichten zu. Service Broker versucht die Zustellung dann erneut mit der Prinzipaladresse und der Partneradresse, bis entweder die Prinzipaladresse erreichbar ist oder der Partner angibt, dass er jetzt der Prinzipal ist. Durch diesen Ansatz stellt Service Broker Nachrichten in den Fällen zuverlässig zu, in denen der Prinzipal und der Partner miteinander kommunizieren können, aber die Instanz, die die Nachricht sendet, den Prinzipal nicht erreichen kann.