Schnittstellen für einen Empfangsadapter mit Batchunterstützung

Ein Empfangsadapter übermittelt Nachrichten stets in einem Batch. Bei einem Batch handelt es sich um eine Einheit von Datenbankvorgängen, die Sie für Aktionen außer Übermittlungen verwenden können. In ein und demselben Batch kann ein Empfangsadapter beispielsweise eine Gruppe von Nachrichten übermitteln, eine andere anhalten und eine dritte löschen. Die Zusammenfassung dieser getrennten Vorgänge im selben Batch optimiert die Leistung durch Minimierung der Anzahl von erforderlichen Roundtrips zur Datenbank. Diese Vorgehensweise wird dringend empfohlen.

Empfangsadapter vom Typ "In-Process" und isolierte Empfangsadapter müssen die folgenden Schnittstellen implementieren, um Nachrichtenbatches an den Server übermitteln zu können:

  • IBTTransport

  • IBTTransportControl (nur In-Process-Adapter)

  • IBTTransportConfig

  • IBaseComponent

  • IPersistPropertyBag

  • IBTBatchCallBack

    Nachfolgend werden die Aktionen beschrieben, die ein Empfangsadapter zum Übermitteln von Nachrichten an den Server ausführt.

  1. Ein Empfangsadapter ruft den Batch vom Transportproxy ab, indem die GetBatch-Methode der IBTTransportProxy-Schnittstelle aufgerufen wird. In seinem Aufruf von GetBatch übergibt der Adapter einen Zeiger an seine IBTBatchCallback-Schnittstellenimplementierung .

  2. Ein Adapter fügt die Nachrichten einzeln zum Batch hinzu, indem die SubmitMessage-Methode der IBTTransportBatch-Schnittstelle aufgerufen wird . Wenn es sich um einen bidirektionalen Vorgang wie solicit-response messaging handelt, wird die SubmitResponseMessage-Methode derselben Schnittstelle aufgerufen, um die Antwortnachricht zu übermitteln.

  3. Wenn alle Nachrichten dem Batch hinzugefügt wurden, ruft der Adapter die Done-Methode der IBTTransportBatch-Schnittstelle auf, um den Batch an den Transportproxy zu übermitteln. Da Empfangsadapter asynchron sind, kann der Adapter sofort einen neuen Batch abrufen und andere Nachrichten übermitteln, nachdem er Fertig aufgerufen hat.

  4. Nachdem der Batch verarbeitet wurde, ruft die Messaging-Engine die BatchComplete-Rückrufmethode des Adapters mithilfe des Transportproxys auf, um den tatsächlichen Aufruf zu tätigen. Ein Array von BTBatchOperationStatus-Objekten, die die status der Übermittlung enthalten, wird an den Adapter übergeben. Jedes Objekt entspricht einem Vorgangstyp und enthält den Gesamtstatus des Vorgangs sowie den Status jeder Nachricht, für die der Vorgang durchgeführt wurde. Nachfolgend werden die Aktionen beschrieben, die der Adapter zum Analysieren des Status der Batchverarbeitung ausführen muss:

    1. Überprüfen Sie den gesamten Batch status HRESULT-Wert, der als Parameter an die BatchComplete-Methode übergeben wird. Ein Fehler bedeutet, dass mindestens ein Vorgang im Batch nicht erfolgreich war. Daher ist die Übermittlung des gesamten Batches als eine Einheit fehlgeschlagen. Der Adapter sollte dann versuchen, die Fehler verursachenden Nachrichten aufzuspüren und nur die Nachrichten erneut als Batch zu übermitteln, die keinen Fehler verursacht haben.

      Ein erfolgreicher Gesamtstatus des Batches bedeutet, dass alle Nachrichten, die an den Transportproxy übergeben wurden, auf Festplatte gespeichert wurden. Es bedeutet jedoch nicht, dass die Pipeline alle Nachrichten erfolgreich verarbeitet hat. Es ist möglich, dass Nachrichten, die in der Pipeline nicht verarbeitet wurden, angehalten wurden. Für Nachrichten, die in der Pipeline nicht verarbeitet werden, wird ein erfolgreicher Gesamtstatus des Batches zurückgegeben, weil die Daten auf Festplatte geschrieben wurden.

    2. Überprüfen Sie die status für jeden Vorgangstyp im operationStatus Parameter. Wenn die status S_OK ist, war die Übermittlung für diesen Vorgang erfolgreich, und Sie müssen die status nicht weiter überprüfen. Wenn die status auf BTS_S_EPM_MESSAGE_SUSPENDED einige der Nachrichten angehalten wurden. BTS_S_EPM_SECURITY_CHECK_FAILED bedeutet, dass bei einigen Nachrichten ein Authentifizierungsfehler in einem authentifizierungsrelevanten Empfangsport aufgetreten ist. Wenn E_FAIL oder ein beliebiges HRESULT mit einem Wert kleiner als 0 zurückgegeben wird, ist bei der Nachrichtenübermittlung für diesen Vorgang ein Fehler aufgetreten.

    3. Überprüfen des Status einzelner Nachrichten für den Vorgangstyp. Für den Übermittlungsvorgangstyp wird die status jeder Nachricht auf S_OK festgelegt, wenn die Übermittlung erfolgreich war. BTS_S_EPM_MESSAGE_SUSPENDED wird zurückgegeben, wenn die Nachricht angehalten wurde. BTS_S_EPM_SECURITY_CHECK_FAILED wird zurückgegeben, wenn bei der Meldung ein Fehler bei der Authentifizierung an einem Empfangsport aufgetreten ist, der eine Authentifizierung erfordert. E_BTS_NO_SUBSCRIPTION kehrt zurück, wenn keine Abonnenten für die veröffentlichte Nachricht vorhanden waren. Wenn E_FAIL oder ein beliebiges HRESULT mit einem Wert kleiner als 0 zurückgegeben wird, ist bei der Nachrichtenübermittlung ein Fehler aufgetreten.

    4. Abhängig von Ihrem Adapter können Sie Nachrichten anhalten, die E_FAIL oder ein fehlerhaftes HRESULT zurückgeben.

  5. Die BatchComplete-Methode muss entweder S_OK oder E_FAIL zurückgeben, um das Ergebnis der Ausführung anzugeben. Wenn die BatchComplete-MethodeE_FAIL oder ein negatives HRESULT zurückgibt, protokolliert der Transportproxy einen Fehler.

    Die folgende Abbildung zeigt das Zusammenwirken der Objekte beim Erstellen eines Empfangsadapters mit Batchunterstützung.

    Abbildung, die die Objektinteraktionen zeigt, die beim Erstellen eines batchgestützten Empfangsadapters beteiligt sind.
    Workflow für einen Empfangsadapter, der einen Nachrichtenbatch übermittelt

Weitere Informationen

Adaptervariablen
Entwickeln eines Empfangsadapters
Instanziieren und Initialisieren eines Empfangsadapters
Schnittstellen für einen In-Process-Empfangsadapter
Schnittstellen für einen isolierten Empfangsadapter
Schnittstellen für einen transaktionalen Empfangsadapter mit Batchunterstützung
Schnittstellen für einen synchronen Empfangsadapter für Anforderungsantworten