Freigeben über


Empfangen von Abfragebenachrichtigungen an mehreren Empfangsspeicherorten von SQL mithilfe von BizTalk Server

Stellen Sie sich ein Szenario vor, in dem mehrere Empfangsspeicherorte als Teil verschiedener BizTalk-Anwendungen erstellt wurden, die für den Empfang von Abfragebenachrichtigungen für dieselbe Tabelle (z. B. Mitarbeiter) in derselben Datenbank konfiguriert sind. Wenn hundert Datensätze in dieselbe Tabelle eingefügt werden, erhalten alle Empfangsspeicherorte die Benachrichtigung. Um effektiv Benachrichtigungen über mehrere Empfangsstandorte hinweg zu erhalten, können Sie Vorgänge von Ihrer BizTalk-Anwendung so aufrufen, dass der andere Empfangsspeicherort nicht dieselbe Benachrichtigung erhält, wenn eine Benachrichtigung von einem Empfangsspeicherort empfangen wird. So können Sie Benachrichtigungen, die an mehreren Standorten empfangen werden, effektiv lastenausgleichen.

Die Aufgaben, die zum Einrichten einer Orchestrierung zum Lastenausgleich für empfangene Benachrichtigungen erforderlich sind, sind identisch mit denen für inkrementelles Empfangen von Abfragebenachrichtigungen von SQL mithilfe von BizTalk Server. In diesem Thema wird nur der Unterschied zwischen den beiden Ansätzen aufgeführt.

Load-Balancing Abfragebenachrichtigungen über mehrere Empfangsspeicherorte hinweg

Wie im Thema Inkrementelles Empfangen von Abfragebenachrichtigungen von SQL mithilfe von BizTalk Server haben Sie inkrementelle Benachrichtigungen konfiguriert, indem Sie eine UPDATE-Anweisung für die Datensätze ausführen, für die bereits benachrichtigt wurden. Zum Konfigurieren des Lastenausgleichs können Sie eine gespeicherte Prozedur ausführen, die die Datensätze löscht, für die benachrichtigt wurden. Betrachten Sie beispielsweise eine gespeicherte Prozedur PROCESS_EMPLOYEE mit der folgenden Definition:

DECLARE @var int  
SELECT TOP 1 @var = Employee_ID FROM Employee  
SELECT * FROM Employee WHERE Employee_ID=@var  
DELETE FROM Employee WHERE Employee_ID=@var  

Wenn Sie diese gespeicherte Prozedur als Teil der BizTalk-Anwendung ausführen, wird der Datensatz gelöscht, für den bereits eine Benachrichtigung empfangen wurde. Der andere Empfangsspeicherort erhält also eine Benachrichtigung für den nächsten Datensatz.

Im Folgenden finden Sie die allgemeinen Schritte, die Sie ausführen müssen, um den Lastenausgleich für den Empfang von Benachrichtigungen zu konfigurieren.

  1. Erstellen Sie ein Schema für Benachrichtigung (eingehender Vorgang) und PROCESS_EMPLOYEE gespeicherten Prozedur (ausgehender Vorgang).

  2. Fügen Sie eine Orchestrierung hinzu, und fügen Sie drei Nachrichten zum Empfangen von Benachrichtigungen, zum Ausführen einer gespeicherten Prozedur und zum Abrufen der Antwort für die gespeicherte Prozedur hinzu.

  3. Erstellen Sie eine Orchestrierung, indem Sie Send- und Receive-Shapes, Create Message Shape und Ports hinzufügen. Sie können denselben Beispielcode zum Erstellen einer Nachricht verwenden, um die PROCESS_EMPLOYEE gespeicherte Prozedur aufzurufen. Beachten Sie, dass Sie beim Ausführen des Vorgangs in BizTalk Server Verwaltungskonsole die Anforderungsnachricht für die gespeicherte PROCESS_EMPLOYEE Prozedur am Speicherort C:\TestLocation\MessageIn haben müssen. Dies geschieht, weil der Codeausschnitt, den Sie im Rahmen der Orchestrierung aufrufen, die unter Inkrementelles Empfangen von Abfragebenachrichtigungen von SQL mithilfe von BizTalk Server eine Anforderungsnachricht basierend auf der Anforderungs-XML erstellt, die in C:\TestLocation\MessageIn vorhanden ist.

  4. Erstellen sie die Anwendung, und stellen Sie sie bereit. Um den Lastenausgleich zu veranschaulichen, müssen Sie diese Orchestrierung mindestens auf zwei verschiedenen Computern bereitstellen, auf denen BizTalk Server und der SQL-Adapter installiert sind.

  5. Geben Sie in der BizTalk Server-Verwaltungskonsole auf beiden Computern die folgenden Bindungseigenschaften für den WCF-Custom- oder WCF-SQL-Empfangsspeicherort an:

    Binding-Eigenschaft Wert
    InboundOperationType Legen Sie dies auf Benachrichtigung fest.
    NotificationStatement Legen Sie dies auf Folgendes fest:

    SELECT Employee_ID, Name FROM dbo.Employee WHERE Status=0

    Hinweis: Für Benachrichtigungsanweisungen müssen Sie immer den Tabellennamen zusammen mit dem Schemanamen angeben. Beispiel: dbo.Employee.
    NotifyOnListenerStart Legen Sie dies auf True fest.
  6. Starten Sie die BizTalk-Anwendung.

  7. Um mit dem Empfang von Benachrichtigungen zu beginnen, fügen Sie hundert Datensätze in die TABELLE EMPLOYEE ein. Stellen Sie dabei sicher, dass das Anforderungs-XML zum Aufrufen der PROCESS_EMPLOYEE gespeicherten Prozedur in C:\TestLocation\MessageIn verfügbar ist.

  8. Überwachen Sie den Speicherort (auf beiden Computern), an dem die BizTalk-Anwendung die Benachrichtigungen verwirft. Sie werden feststellen, dass von den hundert eingefügten Datensätzen ein Speicherort Benachrichtigungen für einige Datensätze erhält, während der andere Speicherort eine Benachrichtigung für die verbleibenden Datensätze erhält. Zusammen erhalten beide Standorte eine Benachrichtigung für alle hundert Datensätze.

Weitere Informationen

Empfangen von SQL-Abfragebenachrichtigungen mithilfe von BizTalk Server