Service BrokerService Broker

Gilt für: JaSQL Server JaAzure SQL-Datenbank (nur verwaltete Instanz) NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

SQL ServerSQL Server Service BrokerService Broker bieten native Unterstützung für Messaging und Warteschlangen in SQL Server-Datenbank-EngineSQL Server Database Engine und verwalteten Azure SQL-Datenbank-Instanzen.Service BrokerService Broker provide native support for messaging and queuing in the SQL Server-Datenbank-EngineSQL Server Database Engine and Azure SQL Database Managed Instance. Entwickler können problemlos anspruchsvolle Anwendungen erstellen, die die Datenbank-EngineDatabase Engine-Komponenten verwenden, um zwischen verschiedenen Datenbanken zu kommunizieren und verteilte und zuverlässige Anwendungen zu erstellen.Developers can easily create sophisticated applications that use the Datenbank-EngineDatabase Engine components to communicate between disparate databases, and build distributed and reliable applications.

Einsatz von Service BrokerWhen to use Service Broker

Verwenden Sie Service Broker-Komponenten, um native, datenbankinterne asynchrone Nachrichtenverarbeitungsfunktionen zu implementieren.Use Service Broker components to implement native in-database asynchronous message processing functionalities. Anwendungsentwickler, die Service BrokerService Broker verwenden, können Datenarbeitsauslastungen zwischen mehreren Datenbanken verteilen, ohne komplizierte Besonderheiten von Kommunikation und Messaging programmieren zu müssen.Application developers who use Service BrokerService Broker can distribute data workloads across several databases without programming complex communication and messaging internals. Service Broker reduziert die Entwicklungs- und die Testarbeit, da Service BrokerService Broker die Kommunikationspfade im Kontext einer Konversation behandelt.Service Broker reduces development and test work because Service BrokerService Broker handles the communication paths in the context of a conversation. Außerdem wird die Leistung verbessert.It also improves performance. Front-End-Datenbanken, die Websites unterstützen, können z. B. Informationen aufzeichnen und prozessintensive Tasks an die Warteschlange von Back-End-Datenbanken senden.For example, front-end databases supporting Web sites can record information and send process intensive tasks to queue in back-end databases. Service BrokerService Broker stellt sicher, dass alle Tasks im Kontext von Transaktionen verwaltet werden, um die Zuverlässigkeit und technische Konsistenz zu gewährleisten.ensures that all tasks are managed in the context of transactions to assure reliability and technical consistency.

ÜbersichtOverview

Service Broker ist ein Nachrichtenübermittlungsframework, das das Erstellen nativer, datenbankinterner dienstorientierter Anwendungen ermöglicht.Service Broker is a message delivery framework that enables you to create native in-database service-oriented applications. 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.Unlike classic query processing functionalities that constantly read data from the tables and process them during the query lifecycle, in service-oriented application you have database services that are exchanging the messages. Jeder Dienst verfügt über eine Warteschlange, in der Nachrichten bis zu ihrer Verarbeitung platziert werden.Every service has a queue where the messages are placed until they are processed.

Service Broker

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.The messages in the queues can be fetched using the Transact-SQL RECEIVE command or by the activation procedure that will be called whenever the message arrives in the queue.

Erstellen von DienstenCreating services

Datenbankdienste werden mit der Transact-SQL-Anweisung CREATE SERVICE erstellt.Database services are created by using the CREATE SERVICE Transact SQL statement. Der Dienst kann mit der Anweisung CREATE QUEUE der erstellten Nachrichtenwarteschlange zugeordnet werden:Service can be associated with the message queue create by using the CREATE QUEUE statement:

CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
    ON QUEUE dbo.ExpenseQueue; 

Senden von NachrichtenSending messages

Nachrichten werden für die Konversation zwischen den Diensten mit der Transact-SQL-Anweisung SEND gesendet.Messages are sent on the conversation between the services using the SEND Transact-SQL statement. Eine Konversation ist ein Kommunikationskanal, der zwischen den Diensten mit der Transact-SQL-Anweisung BEGIN DIALOG eingerichtet wird.A conversation is a communication channel that is established between the services using the BEGIN DIALOG Transact-SQL statement.

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.The message will be sent to the ExpenssesService and placed in dbo.ExpenseQueue. Da dieser Warteschlange kein Aktivierungsverfahren zugeordnet ist, verbleibt die Nachricht in der Warteschlange, bis sie gelesen wird.Because there is no activation procedure associated to this queue, the message will remain in the queue until someone reads it.

Verarbeiten von NachrichtenProcessing messages

Die Nachrichten, die in die Warteschlange gestellt werden, können mit einer Standardabfrage SELECT ausgewählt werden.The messages that are placed in the queue can be selected by using a standard SELECT query. Die SELECT-Anweisung ändert die Warteschlange nicht und entfernt die Nachrichten nicht.The SELECT statement will not modify the queue and remove the messages. Um die Nachrichten aus der Warteschlange zu lesen und abzurufen, können Sie die Transact-SQL-Anweisung RECEIVE verwenden.To read and pull the messages from the queue, you can use the RECEIVE Transact-SQL statement.

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.Once you process all messages from the queue, you should close the conversation using the END CONVERSATION Transact-SQL statement.

Wo finde ich die Dokumentation für Service Broker?Where is the documentation for Service Broker?

Die Referenzdokumentation für Service BrokerService Broker ist in der SQL Server 2019 (15.x)SQL Server 2019 (15.x) -Dokumentation enthalten.The reference documentation for Service BrokerService Broker is included in the SQL Server 2019 (15.x)SQL Server 2019 (15.x) documentation. Diese Referenzdokumentation enthält die folgenden Abschnitte:This reference documentation includes the following sections:

Informationen zu -Konzepten sowie Entwicklungs- und Verwaltungsaufgaben finden Sie in der zuvor veröffentlichten Dokumentation Service BrokerService Broker .See the previously published documentation for Service BrokerService Broker concepts and for development and management tasks. Diese Dokumentation ist aufgrund der geringen Anzahl von Änderungen in SQL Server 2019 (15.x)SQL Server 2019 (15.x) in Service BrokerService Broker nicht in der SQL Server 2019 (15.x)SQL Server 2019 (15.x)-Dokumentation enthalten.This documentation is not reproduced in the SQL Server 2019 (15.x)SQL Server 2019 (15.x) documentation due to the small number of changes in Service BrokerService Broker in SQL Server 2019 (15.x)SQL Server 2019 (15.x).

Neues in Service BrokerWhat's new in Service Broker

In SQL Server 2019 (15.x)SQL Server 2019 (15.x)wurden keine wesentlichen Änderungen eingeführt.No significant changes are introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x). Für SQL Server 2012 (11.x)SQL Server 2012 (11.x)wurden die folgenden Änderungen eingeführt.The following changes were introduced in SQL Server 2012 (11.x)SQL Server 2012 (11.x).

Service Broker und verwaltete Azure SQL-Datenbank-InstanzService broker and Azure SQL Database Managed Instance

  • Ein instanzenübergreifender Service Broker wird nicht unterstützt.Cross-instance service broker is not supported
  • sys.routes – Voraussetzung: Wählen Sie die Adresse aus sys.routes.sys.routes - Prerequisite: select address from sys.routes. Die Adresse muss für jede Route LOCAL sein.Address must be LOCAL on every route. Informationen hierzu finden Sie unter sys.routes.See sys.routes.
  • CREATE ROUTE: CREATE ROUTE kann ausschließlich mit dem Wert LOCAL für ADDRESS verwendet werden.CREATE ROUTE - you cannot use CREATE ROUTE with ADDRESS other than LOCAL. Informationen hierzu finden Sie unter CREATE ROUTE.See CREATE ROUTE.
  • ALTER ROUTE kann ALTER ROUTE mit keiner anderen ADDRESS als LOCAL verwenden.ALTER ROUTE cannot use ALTER ROUTE with ADDRESS other than LOCAL. Informationen hierzu finden Sie unter ALTER ROUTE.See ALTER ROUTE.

Nachrichten können an mehrere Zieldienste gesendet werden (Multicast)Messages can be sent to multiple target services (multicast)

Die Syntax der SEND (Transact-SQL)-Anweisung wurde erweitert, um mehrere Konversationshandles zu unterstützen und so die Multicastübermittlung zu ermöglichen.The syntax of the SEND (Transact-SQL) statement has been extended to enable multicast by supporting multiple conversation handles.

Warteschlangen machen die Nachrichtenwartezeit verfügbarQueues expose the message enqueued time

Warteschlangen verfügen über eine neue message_enqueue_time-Spalte, in der angezeigt wird, wie lange eine Nachricht in der Warteschlange war.Queues have a new column, message_enqueue_time, that shows how long a message has been in the queue.

Behandlung nicht verarbeitbarer Nachrichten kann deaktiviert werdenPoison message handling can be disabled

Die Anweisungen CREATE QUEUE (Transact-SQL) und ALTER QUEUE (Transact-SQL) bieten nun die Möglichkeit, die Behandlung von nicht verarbeitbaren Nachrichten zu aktivieren oder deaktivieren, indem die Klausel POISON_MESSAGE_HANDLING (STATUS = ON | OFF) hinzugefügt wird.The CREATE QUEUE (Transact-SQL) and ALTER QUEUE (Transact-SQL) statements now have the ability to enable or disable poison message handling by adding the clause, POISON_MESSAGE_HANDLING (STATUS = ON | OFF). 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.The catalog view sys.service_queues now has the column is_poison_message_handling_enabled to indicate whether poison message is enabled or disabled.

AlwaysOn-Unterstützung in Service BrokerAlways On support in Service Broker

Weitere Informationen finden Sie unter Service Broker mit AlwaysOn-Verfügbarkeitsgruppen (SQL Server).For more information, see Service Broker with Always On Availability Groups (SQL Server).