Service Broker-Nachrichtenweiterleitung

Mit der Nachrichtenweiterleitung von Service Broker kann eine Instanz von SQL Server Nachrichten, die von außerhalb der Instanz stammen, annehmen und diese Nachrichten an eine andere Instanz senden.

Ein Administrator kann die Nachrichtenweiterleitung für folgende Zwecke verwenden:

  • Bereitstellen von Verbindungen zwischen Servern in verschiedenen vertrauenswürdigen Domänen

  • Vereinfachen der Verwaltung durch Erstellen einer einzigen zentralisierten Instanz, die die Routinginformationen für eine Domäne bereitstellt

  • Verteilen von Arbeit zwischen mehreren Instanzen

Bei aktivierter Weiterleitung ist in der Routingtabelle in msdb.sys.routes festgelegt, ob eine Nachricht, die von einer anderen Instanz eintrifft, weitergeleitet wird. Wenn die Adresse für die übereinstimmende Route nicht LOCAL lautet, leitet SQL Server die Nachricht an die angegebene Adresse weiter. Andernfalls wird die Nachricht lokal übermittelt.

Jede Service Broker-Nachricht enthält eine maximale Lebensdauer und eine Angabe, wie oft die Nachricht weitergeleitet wurde. Wenn eine Instanz die Nachricht weiterleitet, erhöht diese Instanz die Anzahl in der Nachricht. Wenn die Nachricht die maximale Lebensdauer überschreitet, verwirft die weiterleitende Instanz die Nachricht. Bei dieser Strategie werden Probleme in Situationen vermieden, in denen möglicherweise eine Routingschleife vorhanden ist.

Weiterleitung und zuverlässige Übermittlung

Eine Instanz, die eine Nachricht weiterleitet, bestätigt die Nachricht nicht für den Absender. Lediglich das endgültige Ziel bestätigt die Nachricht. Wenn der Absender nach einer bestimmten Zeit keine Bestätigung vom Ziel erhält, versucht der Absender erneut, die Nachricht zuzustellen.

Eine Instanz, die die Nachrichtenweiterleitung durchführt, muss keine weitergeleiteten Nachrichten speichern. Stattdessen behält SQL Server die Nachrichten, die weitergeleitet werden sollen, im Arbeitsspeicher. Der für die Nachrichtenweiterleitung zur Verfügung stehende Arbeitsspeicher wird als Teil der Service Broker-Endpunktkonfiguration angegeben. Diese Strategie ermöglicht eine effiziente und statusfreie Nachrichtenweiterleitung. Wenn eine Instanz, die die Nachrichtenweiterleitung ausführt, einen Fehler erzeugt, gehen keine Nachrichten verloren. Jede Nachricht bleibt so lange beim Absender, bis die Nachricht vom endgültigen Ziel bestätigt wird, wie unter Service Broker-Kommunikationsprotokolle beschrieben.

Die Verwaltungssicht sys.dm_broker_forwarded_messages enthält Informationen über Nachrichten, die derzeit von der Instanz weitergeleitet werden. Eine Instanz behält die Nachrichten nicht im Weiterleitungsprozess; sie befinden sich lediglich im Arbeitsspeicher. Die Instanz, die die Nachricht gesendet hat, und die Instanz, die sie empfängt, behalten die Nachrichten. Die sendende Instanz entfernt die Nachricht erst dann, wenn die empfangende Instanz den Eingang der Nachricht bestätigt.

Sicherheit und Weiterleitung

Für die Service Broker-Nachrichtenweiterleitung ist keine Entschlüsselung der weitergeleiteten Nachricht durch die weiterleitende Instanz erforderlich. Deshalb muss lediglich für die Datenbanken, die an der Konversation teilnehmen, Dialogsicherheit konfiguriert sein.

Da jedoch auf die Verbindungen zwischen den SQL Server-Instanzen die Transportsicherheit angewendet wird, muss für jede SQL Server-Instanz die Transportsicherheit ordnungsgemäß für die Instanzen konfiguriert sein, mit denen eine direkte Kommunikation stattfindet. Wenn z. B. Instanz A und Instanz B über eine weiterleitende Instanz kommunizieren, dann muss sowohl für Instanz A als auch für Instanz B die Transportsicherheit für die weiterleitende Instanz ordnungsgemäß konfiguriert sein. Da die Instanzen keinen direkten Nachrichtenaustausch durchführen, sollte für die Instanzen zur Kommunikation miteinander keine Transportsicherheit konfiguriert sein.