Routen

Service Broker verwendet Routen, um festzulegen, wohin die Nachrichten übermittelt werden sollen. Wenn ein Dienst in einer Konversation eine Nachricht sendet, verwendet SQL Server Routen, um den Dienst zu suchen, der die Nachricht empfängt. Wenn dieser Dienst reagiert, verwendet SQL Server erneut Routen, um den initiierenden Dienst zu suchen. Standardmäßig enthält jede Datenbank eine Route, die angibt, dass die Nachrichten für einen beliebigen Dienst, für den es keine explizite Route gibt, innerhalb der SQL Server-Instanz übermittelt werden.

Es gibt drei grundlegende Komponenten für eine Route:

  • Dienstname
    Der Name des Diensts, für den diese Route die Adressierung angibt. Dieser Name muss genau mit dem Service Name im BEGIN DIALOG-Befehl übereinstimmen.

  • Broker-Instanzbezeichner
    Ein eindeutiger Bezeichner für eine bestimmte Datenbank, an die die Nachrichten gesendet werden. Dabei handelt es sich um die Spalte service_broker_guid in der Tabellenzeile sys.databases für die Datenbank, auf die diese Route zeigt.

  • Netzwerkadresse
    Eine tatsächliche Computeradresse, ein Schlüsselwort, das die Route zum lokalen Computer beschränkt, oder ein Schlüsselwort, das darauf hinweist, dass die Transportebene die Adresse vom Dienstnamen ableitet. Bei einer Netzwerkadresse kann es sich um die Adresse des Brokers handeln, der als Host des Diensts fungiert, oder um die Adresse eines Weiterleitungsbrokers.

Um die Route für eine Konversation zu ermitteln, gleicht SQL Server den Dienstnamen und den Brokerinstanzbezeichner der BEGIN DIALOG CONVERSATION-Anweisung mit dem Dienstnamen und dem Brokerinstanzbezeichner der Route ab. Routen ohne Dienstnamen stimmen mit jedem Dienstnamen überein. Routen ohne Brokerinstanzbezeichner stimmen mit jedem Brokerinstanzbezeichner überein. Wenn mehr als eine Route mit einer Konversation übereinstimmt, wählt SQL Server eine Route aus, wie unter Service Broker-Routing beschrieben.

Durch SQL Server wird sichergestellt, dass nach Bestätigung der ersten Nachricht durch das Ziel alle nachfolgenden Nachrichten dieser Konversation an dieselbe Datenbank geleitet werden. Für andere Konversationen in derselben Konversationsgruppe ist dies jedoch nicht sichergestellt. Wenn eine Anwendung voraussetzt, dass die Nachrichten in verknüpften Konversationen an dieselbe Datenbank geleitet werden, muss die Anwendung einen Brokerinstanzbezeichner bereitstellen, sobald die Anwendung mit einer Konversation beginnt.

Standardmäßig enthält jede Benutzerdatenbank die Route AutoCreatedLocal. Diese Route stimmt mit jedem Dienstnamen und jeder Brokerinstanz überein und gibt an, dass die Nachricht innerhalb der aktuellen Instanz übermittelt werden sollte. Für einfache Szenarien, in denen sowohl der Initiator als auch das Ziel für die Konversation in derselben SQL Server-Instanz vorhanden sind, sind keine zusätzlichen Routen erforderlich. Die Erstellung einer Route für jeden Dienst trägt jedoch dazu bei, vor Änderungen oder dem Löschen der AutoCreatedLocal-Route zu schützen.