Erstellen von Service Broker-Objekten

Eine Anwendung verwendet Service Broker, indem sie Transact-SQL-Anweisungen ausführt, die für in einer Datenbank definierte Service Broker-Objekte verwendet werden. In diesem Abschnitt werden allgemeine Überlegungen beschrieben, die Sie berücksichtigen sollten, wenn Sie die Service Broker-Objekte für eine Anwendung erstellen.

Übersicht

Service Broker-Objekte definieren die Metadaten und den Speicher für eine bestimmte Gruppe von Tasks:

  • Nachrichtentypen definieren die Daten, die im Rahmen einer Konversation ausgetauscht werden.

  • Verträge definieren Tasks. Jeder Vertrag gibt die Nachrichtentypen an, die in einer bestimmten Konversation verwendet werden können, und legt fest, welche Seite der Konversation die Nachricht senden kann.

  • In einer Warteschlange werden eingehende Nachrichten für einen Dienst gespeichert.

  • Ein Dienst stellt eine Gruppe von verwandten Geschäftsaufgaben dar. Der Name des Diensts wird auch verwendet, um die Warteschlange für den Dienst zu suchen.

Beachten Sie, dass ein Vertrag von einem oder mehreren Nachrichtentypen abhängt. Ein Dienst hängt von einer Warteschlange ab und kann von einem oder mehreren Verträgen abhängen. Deshalb werden Verträge nach Nachrichtentypen erstellt und vor Nachrichtentypen gelöscht. Dienste werden nach Warteschlangen und Verträgen erstellt und vor Warteschlangen und Verträgen gelöscht.

Erstellen von Objekten für einen Dienst

Das Verfahren zum Erstellen von Diensten ist in seinen Grundzügen immer gleich, unabhängig davon, ob es sich um einen initiierenden Dienst, einen Zieldienst oder beides handelt.

Die Definition eines Diensts gibt die Verträge an, für die der Dienst als Ziel fungieren kann. Eine Anwendung hingegen kann mithilfe eines Diensts eine Konversation initiieren, bei der ein beliebiger in der Datenbank definierter Vertrag verwendet wird. Service Broker legt diesen Ansatz zugrunde, um die allgemeine Regel zu erzwingen, dass ein Dienst nur Nachrichten empfangen sollte, die die Anwendung verarbeiten kann. Um sicherzustellen, dass die Anwendung keine Nachrichten mit beliebigem oder unbekanntem Typ empfängt, akzeptiert Service Broker nur dann einen neuen Dialog, wenn dieser einem im Dienst angegebenen Vertrag entspricht. Ein initiierender Dienst gibt den Vertrag an, der zu Beginn einer Konversation verwendet werden soll, und muss daher nicht den Vertrag in der Dienstdefinition einschließen.

So erstellen Sie die Objekte für einen Dienst

  1. Erstellen Sie Nachrichtentypen, die die Nachrichten definieren, mit denen der Dienst jede erforderliche Kommunikation aufbaut. Sie können diese Typen selbst definieren oder Skripts abrufen, mit denen die Typen anhand des Erstellers des Diensts erstellt werden, mit dem Ihr Dienst kommunizieren wird. Überspringen Sie diesen Schritt, wenn die Datenbank bereits die vom Dienst benötigten Nachrichtentypen enthält.

  2. Erstellen Sie einen oder mehrere Verträge, die die Struktur der Konversationen definieren, an denen dieser Dienst möglicherweise teilnimmt. Sie können den jeweiligen Vertrag selbst definieren oder Skripts abrufen, mit denen der Vertrag anhand des Erstellers des Diensts erstellt wird, mit dem Ihr Dienst kommunizieren wird. Überspringen Sie diesen Schritt, wenn die Datenbank bereits die vom Dienst benötigten Verträge enthält.

  3. Erstellen Sie eine Warteschlange. Service Broker verwendet diese Warteschlange, um eingehende Nachrichten für den Dienst zu empfangen und zu speichern. Weitere Informationen zum Erstellen von Warteschlangen finden Sie in der Beschreibung zu CREATE QUEUE. Jeder Dienst muss eine Warteschlange haben. Zur Vereinfachung der Programmierung und Administration verwendet jeder Dienst im Allgemeinen eine ihm zugeordnete Warteschlange. Falls der Dienst Nachrichtenbeibehaltung erfordert, geben Sie die Nachrichtenbeibehaltung für die Warteschlange an.

  4. Erstellen Sie einen Dienst. Die Dienstdefinition gibt die vom Dienst verwendete Warteschlange sowie die Verträge an, für die dieser Dienst als Ziel fungiert.

In den meisten Fällen erstellen Sie den Zieldienst und anschließend mithilfe der für den Zieldienst erstellten Verträge und Nachrichtentypen einen initiierenden Dienst. Bisweilen erstellen Sie aber möglicherweise einen Zieldienst für einen bereits definierten initiierenden Dienst. In diesen Fällen verwendet der Zieldienst die Nachrichtentypen und Verträge, die der initiierende Dienst verwendet. Wenn Sie beispielsweise einen Zieldienst für den Empfang von Ereignisbenachrichtigungen erstellen, verwenden Sie den Vertrag https://schemas.microsoft.com/SQL/Notifications/PostEventNotification, weil dies der vom initiierenden Dienst verwendete Vertrag ist.

Verwalten von Objektdefinitionen

Es empfiehlt sich, ein Transact-SQL-Skript für die von der Anwendung verwendeten Service Broker-Objekte zu erstellen. Durch dieses Transact-SQL-Skript wird es leichter, auf die Einzelheiten der Service Broker-Objekte zu verweisen. Das Skript bietet auch eine Möglichkeit, den Dienst für ein anderes System bereitzustellen oder gegebenenfalls neu zu erstellen.

Wenn die Anwendung den Versand von Nachrichten zwischen SQL Server-Instanzen umfasst, sollten Sie ein Skript erstellen, das die Nachrichtentypen und Verträge für den Dienst definiert, und ein zweites Skript, das die Warteschlange und den Dienst definiert. Im ersten Skript werden die Schnittstelle für den Dienst sowie die Objekte definiert, die vom initiierenden Dienst und vom Zieldienst gemeinsam verwendet werden. Im zweiten Skript werden der Dienstname und die Warteschlange sowie die Objekte für eine Seite der Konversation definiert.

In diesem Abschnitt