Service Broker
Gilt für: SQL Server Azure SQL Managed Instance
SQL Server Service Broker bietet native Unterstützung für Messaging und Warteschlangen in SQL Server-Datenbank-Engine und Azure SQL Managed Instance. Entwickler können problemlos anspruchsvolle Anwendungen erstellen, die die Datenbank-Engine-Komponenten verwenden, um zwischen verschiedenen Datenbanken zu kommunizieren und verteilte und zuverlässige Anwendungen zu erstellen.
Einsatz von Service Broker
Verwenden Sie Service Broker-Komponenten, um native, datenbankinterne asynchrone Nachrichtenverarbeitungsfunktionen zu implementieren. Anwendungsentwickler, die Service Broker verwenden, können Datenarbeitsauslastungen zwischen mehreren Datenbanken verteilen, ohne komplizierte Besonderheiten von Kommunikation und Messaging programmieren zu müssen. Service Broker reduziert die Entwicklungs- und die Testarbeit, da Service Broker die Kommunikationspfade im Kontext einer Konversation behandelt. Außerdem wird die Leistung verbessert. Front-End-Datenbanken, die Websites unterstützen, können z. B. Informationen aufzeichnen und prozessintensive Tasks an die Warteschlange von Back-End-Datenbanken senden. Service Broker stellt sicher, dass alle Tasks im Kontext von Transaktionen verwaltet werden, um die Zuverlässigkeit und technische Konsistenz zu gewährleisten.
Übersicht
Service Broker ist ein Nachrichtenübermittlungsframework, das das Erstellen nativer, datenbankinterner dienstorientierter Anwendungen ermöglicht. Im Gegensatz zu den klassischen Funktionen der Abfrageverarbeitung, die während des Abfragelebenszyklus ständig Daten aus den Tabellen lesen und verarbeiten, stehen Ihnen in der dienstorientierten Anwendung Datenbankdienste zur Verfügung, die Nachrichten austauschen. Jeder Dienst verfügt über eine Warteschlange, in der Nachrichten bis zu ihrer Verarbeitung platziert werden.
Die Nachrichten in den Warteschlangen können mit dem Transact-SQL-Befehl RECEIVE
oder durch das Aktivierungsverfahren abgerufen werden, das aufgerufen wird, wenn die Nachricht in der Warteschlange eingeht.
Erstellen von Diensten
Datenbankdienste werden mit der Transact-SQL-Anweisung CREATE SERVICE erstellt. Der Dienst kann mit der Anweisung CREATE QUEUE der erstellten Nachrichtenwarteschlange zugeordnet werden:
CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
ON QUEUE dbo.ExpenseQueue;
Senden von Nachrichten
Nachrichten werden für die Konversation zwischen den Diensten mit der Transact-SQL-Anweisung SEND gesendet. Eine Konversation ist ein Kommunikationskanal, der zwischen den Diensten mit der Transact-SQL-Anweisung BEGIN DIALOG
eingerichtet wird.
DECLARE @dialog_handle UNIQUEIDENTIFIER;
BEGIN DIALOG @dialog_handle
FROM SERVICE ExpensesClient
TO SERVICE 'ExpensesService';
SEND ON CONVERSATION @dialog_handle (@Message) ;
Die Nachricht wird an ExpenssesService
gesendet und in dbo.ExpenseQueue
platziert. Da dieser Warteschlange kein Aktivierungsverfahren zugeordnet ist, verbleibt die Nachricht in der Warteschlange, bis sie gelesen wird.
Verarbeiten von Nachrichten
Die Nachrichten, die in die Warteschlange gestellt werden, können mit einer Standardabfrage SELECT
ausgewählt werden. Die SELECT
-Anweisung ändert die Warteschlange nicht und entfernt die Nachrichten nicht. Um die Nachrichten aus der Warteschlange zu lesen und abzurufen, können Sie die Transact-SQL-Anweisung RECEIVE verwenden.
RECEIVE conversation_handle, message_type_name, message_body
FROM ExpenseQueue;
Nachdem Sie alle Nachrichten aus der Warteschlange verarbeitet haben, sollten Sie die Konversation mit der Transact-SQL-Anweisung END CONVERSATION schließen.
Wo finde ich die Dokumentation für Service Broker?
Die Referenzdokumentation für Service Broker ist in der SQL Server -Dokumentation enthalten. Diese Referenzdokumentation enthält die folgenden Abschnitte:
Anweisungen (Transact-SQL) für Datendefinitionssprache (DDL) für CREATE-, ALTER- und DROP-Anweisungen
Dynamische Verwaltungssichten in Verbindung mit Service Broker (Transact-SQL)
Informationen zu -Konzepten sowie Entwicklungs- und Verwaltungsaufgaben finden Sie in der zuvor veröffentlichten Dokumentation Service Broker . Diese Dokumentation ist aufgrund einiger weniger Änderungen am Service Broker, die in den neuen Versionen von SQL Server vorgenommen wurden, nicht in der SQL Server-Dokumentation enthalten.
Neues in Service Broker
Service Broker und Azure SQL Managed Instance
Der instanzübergreifende Service Broker-Nachrichtenaustausch zwischen Instanzen von Azure SQL Managed Instance und der Nachrichtenaustausch zwischen SQL Server und Azure SQL Manage Instance ist derzeit in der öffentlichen Vorschau:
CREATE ROUTE
: Als Port muss „4022“ angegeben werden. Informationen hierzu finden Sie unter CREATE ROUTE.ALTER ROUTE
: Als Port muss „4022“ angegeben werden. Informationen hierzu finden Sie unter ALTER ROUTE.
Transportsicherheit wird unterstützt, Dialogsicherheit dagegen nicht:
CREATE REMOTE SERVICE BINDING
wird nicht unterstützt.
Service Broker ist standardmäßig aktiviert und kann nicht deaktiviert werden. Folgende Optionen für „ALTER DATABASE“ werden nicht unterstützt:
ENABLE_BROKER
DISABLE_BROKER
In SQL Server 2019 (15.x) wurden keine wesentlichen Änderungen eingeführt. Für SQL Server 2012 (11.x)wurden die folgenden Änderungen eingeführt.
Nachrichten können an mehrere Zieldienste gesendet werden (Multicast)
Die Syntax der SEND (Transact-SQL)-Anweisung wurde erweitert, um mehrere Konversationshandles zu unterstützen und so die Multicastübermittlung zu ermöglichen.
Warteschlangen machen die Nachrichtenwartezeit verfügbar
Warteschlangen verfügen über eine neue message_enqueue_time-Spalte, in der angezeigt wird, wie lange eine Nachricht in der Warteschlange war.
Behandlung nicht verarbeitbarer Nachrichten kann deaktiviert werden
Die Anweisungen CREATE QUEUE (Transact-SQL) und ALTER QUEUE (Transact-SQL) bieten nun die Möglichkeit, die Behandlung nicht verarbeitbarer Nachrichten durch Hinzufügen der Klausel POISON_MESSAGE_HANDLING (STATUS = ON | OFF)
zu aktivieren oder zu deaktivieren. Die sys.service_queues -Katalogsicht enthält jetzt eine is_poison_message_handling_enabled -Spalte, in der angezeigt wird, ob die Behandlung nicht verarbeitbarer Nachrichten aktiviert oder deaktiviert ist.
AlwaysOn-Unterstützung in Service Broker
Weitere Informationen finden Sie unter Service Broker mit AlwaysOn-Verfügbarkeitsgruppen (SQL Server).
Nächste Schritte
Service Broker wird am häufigsten für Ereignisbenachrichtigungen verwendet. Informieren Sie sich, wie Sie Ereignisbenachrichtigungen implementieren und die Dialogsicherheit konfigurieren, oder sehen Sie sich weitere Informationen an.