Freigeben über


Unterhaltungsgruppen

Gilt für:SQL ServerAzure SQL Managed Instance

Eine Konversationsgruppe identifiziert eine Gruppe zusammengehöriger Konversationen. Eine Konversationsgruppe ermöglicht einer Anwendung die Koordinierung von an einer bestimmten Geschäftsaufgabe beteiligten Konversationen.

Jede Konversation gehört zu einer Konversationsgruppe. Jede Konversationsgruppe ist einem bestimmten Dienst zugeordnet, und alle Konversationen in der Gruppe sind Konversationen zu oder von diesem Dienst. Eine Konversationsgruppe kann eine beliebige Anzahl von Konversationen enthalten.

SQL Server verwendet Konversationsgruppen, um Zugriff auf Nachrichten im Zusammenhang mit einer bestimmten Geschäftsaufgabe genau einmal zu gewähren, und zwar an der Reihenfolgeposition, an der sie gesendet werden. Wenn eine Anwendung eine Nachricht sendet oder empfängt, sperrt SQL Server die Konversationsgruppe, zu der die Nachricht gehört. So können jeweils nur in einer Sitzung Nachrichten für die Konversationsgruppe empfangen werden. Durch die Sperrung von Konversationsgruppen wird sichergestellt, dass eine Anwendung Nachrichten in jeder Konversation genau einmal in der richtigen Reihenfolge verarbeiten kann. Da eine Konversationsgruppe mehr als eine Konversation enthalten kann, kann eine Anwendung Konversationsgruppen verwenden, um Nachrichten im Zusammenhang mit derselben Geschäftsaufgabe zu identifizieren, und diese Nachrichten zusammen verarbeiten.

Eine Unterhaltungsgruppe wird nicht zwischen Teilnehmern in einer Unterhaltung geteilt. Deshalb kann jeder Teilnehmer einer Konversation diese nach Bedarf einer Gruppe zuordnen. Eine Anwendung kann komplexe Interaktionen zwischen Diensten verwalten, ohne dass eine besondere Unterstützung durch diese Dienste erforderlich ist.

Beispiele für Unterhaltungsgruppen

Eine Personalanwendung kann einen GetEmployeeInformation Dienst haben, der Informationen aus einem Lohnbuchhaltungsdienst und Informationen aus einem Leistungsservice kombiniert. Der GetEmployeeInformation Dienst beginnt eine Unterhaltung mit jedem Dienst und bezieht sich auf eine Unterhaltung mit der anderen in derselben Unterhaltungsgruppe. Service Broker fügt jeder eingehenden Nachricht in diesen zwei Konversationen den Konversationsgruppenbezeichner hinzu, unabhängig davon, ob die Nachricht vom Lohnbuchhaltungs- oder Lohnzuschlägedienst eingeht. Da sich die Unterhaltungen in derselben Unterhaltungsgruppe befinden, stellt der Servicebroker alle informationen bereit, die für den GetEmployeeInformation Dienst erforderlich sind, um die Leistungsinformationen mit den Lohnbuchhaltungsinformationen abzugleichen, unabhängig davon, wie viele Anforderungen im GetEmployeeInformation Dienst ausgeführt werden.

Die Nachrichten an den Lohnbuchhaltungsdienst und die Nachrichten an den Leistungsdienst enthalten keine Unterhaltungsgruppeninformationen für die von GetEmployeeInformation. Jeder Dienst arbeitet unabhängig, und nur der GetEmployeeInformation Dienst verwaltet Informationen über die gesamte Geschäftsaufgabe. Eigenständige Dienste vereinfachen die Codierung und Wartung. Ein weiterer Vorteil dieser Eigenständigkeit besteht darin, dass bei Nichtverfügbarkeit eines Diensts der andere weiter verwendet werden kann.

Organisieren des Anwendungszustands

Ein Vorteil der Konversationsgruppe besteht darin, dass der Konversationsgruppenbezeichner ein praktischer Schlüssel zum Identifizieren und Abrufen des Anwendungsstatus ist. Der Konversationsgruppenbezeichner vereinfacht die Verwaltung des Anwendungsstatus in der Datenbank. Wenn eine Aufgabe viele Nachrichten im Laufe der Zeit austauschen muss, ist es ineffizient, eine Instanz der Anwendung beizubehalten, die gerade ausgeführt wird, um den Anwendungsstatus beizubehalten. Die Skalierbarkeit einer Anwendung zwischen Nachrichten ist besser, wenn der Aufgabe zugeordnete Daten in der Datenbank gespeichert und dann abgerufen werden, wenn die nächste dieser Aufgabe zugeordnete Nachricht empfangen wird. Der Unterhaltungsgruppenbezeichner kann als Primärschlüssel in einer Zustandstabelle verwendet werden, die von einem Anwendungsentwickler bereitgestellt wird, um einen schnellen Abruf des Zustands zu ermöglichen, der einer bestimmten Aufgabe zugeordnet ist. Weitere Informationen zur Verwendung des Gesprächsgruppenbezeichners zum Verwalten des Zustands finden Sie unter Zustandsverwaltung.

Da SQL Server die Unterhaltungsgruppe jedes Mal sperrt, wenn eine Anwendung eine Nachricht sendet oder empfängt, muss eine Anwendung nicht explizit verhindern, dass ein anderes Programm die gleichen Zustandsdaten gleichzeitig aktualisiert. Die Anwendung sperrt die Konversationsgruppe, stellt den Status wieder her, verarbeitet die Nachrichten, aktualisiert den Status und führt dann einen Commit für die Transaktion aus.

SQL Server ermöglicht einer Anwendung, die nächste verfügbare Konversationsgruppe zu sperren, ohne eine Nachricht zu empfangen. Mithilfe der GET CONVERSATION GROUP Anweisung kann eine Anwendung eine Unterhaltungsgruppe sperren und den Zustand wiederherstellen, bevor Nachrichten verarbeitet werden. Weitere Informationen finden Sie in der GET CONVERSATION GROUP-Anweisung .

Lebensdauer der Unterhaltungsgruppe

Der Dienstbroker verwaltet die Lebensdauer der Unterhaltungsgruppe. Sie müssen keine Unterhaltungsgruppe explizit erstellen oder zerstören. Service Broker erstellt eine neue Konversationsgruppe unter den folgenden Umständen:

  • Eine Anwendung beginnt eine neue Unterhaltung, die nicht mit einer vorhandenen Unterhaltungsgruppe verknüpft ist. Service Broker erstellt eine neue Konversationsgruppe und weist der Konversationsgruppe einen neuen Bezeichner zu.

  • Eine Anwendung beginnt eine Unterhaltung im Zusammenhang mit einer Unterhaltungsgruppen-ID, die derzeit nicht vorhanden ist. In diesem Fall erstellt Service Broker eine neue Konversationsgruppe mit dem angegebenen Bezeichner. Dies bedeutet, dass Sie einem Konversationsgruppenbezeichner einen eigenen Wert zuweisen können.

  • Service Broker empfängt die erste Nachricht in einer von einem anderen Dienst gestarteten neuen Konversation. In diesem Fall verwendet Service Broker den Namen des Diensts und gegebenenfalls den Brokerinstanzbezeichner, um Folgendes auszuführen:

    1. Suchen der entsprechenden Warteschlange.
    2. Erstellen einer neuen Konversationsgruppe und Zuordnen dieser Konversationsgruppe zur Warteschlange.
    3. Erstellen eines neuen Konversationshandles und Hinzufügen des Handles zur neuen Konversationsgruppe.
    4. Einfügen der eingehenden Nachricht in die Warteschlange.

Service Broker fügt den Konversationsgruppenbezeichner den Metadaten für die Konversation hinzu, durch die die Konversationsgruppe erstellt wurde. Jedes Mal, wenn Service Broker eine Nachricht für eine der Konversationsgruppe zugeordnete Konversation empfängt, wird dieser Nachricht der Konversationsgruppenbezeichner hinzugefügt, bevor sie in die Warteschlange eingegeben wird.

Ein Konversationsgruppenbezeichner ist vom Zeitpunkt seiner Erstellung durch Service Broker gültig bis zu dem Zeitpunkt, zu dem alle dem Bezeichner zugeordneten Konversationen enden. Der Konversationsgruppenbezeichner ist also gültig, solange eine Konversation in der Gruppe aktiv ist.

Eine Anwendung, die den Konversationsgruppenbezeichner zur Verwaltung des Anwendungsstatus verwendet, verwendet eine vom Entwickler bereitgestellte Statustabelle. Die Anwendung muss diesen Status aus der Statustabelle löschen, wenn sie ermittelt, dass der Status nicht mehr notwendig ist. In vielen Fällen löscht die Anwendung den Status, nachdem die Aufgabe erfolgreich abgeschlossen wurde, oder nach Fehlern, dass die Aufgabe nicht abgeschlossen werden kann. In diesen Fällen schließt die Anwendung normalerweise den Befehl zum Löschen des Status innerhalb der Transaktion ein, mit der die letzte Antwortnachricht gesendet und die Konversation beendet wird. Diese Strategie stellt sicher, dass der Anwendungsstatus und der Konversationsgruppenbezeichner dieselbe Lebensdauer aufweisen. Wenn der Sendevorgang einen Fehler erzeugt, wird ein Rollback für den Löschvorgang ausgeführt. Wenn der Löschvorgang fehlschlägt, wird der Sendevorgang zurückgesetzt, und SQL Server sendet die Nachricht nicht. In jedem Fall bleiben der Anwendungsstatus und der Konversationsgruppenbezeichner gültig. Wenn beide Vorgänge erfolgreich sind, endet die Lebensdauer des Konversationsgruppenbezeichners zur gleichen Zeit, zu der das Programm den zugeordneten Anwendungsstatus löscht.