バッチ処理に対応した受信アダプター用のインターフェイス
受信アダプターでは、常にメッセージがバッチ単位で送信されます。 バッチとは、送信以外のアクションに使用できるデータベース操作の集まりです。 たとえば受信アダプターでは、同じバッチ内で 1 つのメッセージ セットを送信し、別のメッセージ セットを中断し、さらに別のメッセージ セットを削除するという操作を実行できます。 このようにさまざまな操作を 1 つのバッチにまとめ、必要なデータベースのラウンド トリップ回数を最小限に抑えることで、パフォーマンスを最適化できます。バッチの使用を強くお勧めします。
インプロセス受信アダプターと分離受信アダプターでサーバーにメッセージのバッチを送信するには、アダプターに次のインターフェイスを実装する必要があります。
IBTTransport
IBTTransportControl (インプロセス アダプターのみ)
IBTTransportConfig
IBaseComponent
IPersistPropertyBag
IBTBatchCallBack
受信アダプターは、メッセージをサーバーに送信するとき、次の順序でアクションを実行します。
受信アダプターは、IBTTransportProxy インターフェイスの GetBatch メソッドを呼び出して、トランスポート プロキシからバッチを取得します。 GetBatch の呼び出しでは、アダプターは IBTBatchCallback インターフェイス実装へのポインターを渡します。
アダプターは、IBTTransportBatch インターフェイスの SubmitMessage メソッドを呼び出して、一度に 1 つずつメッセージをバッチに追加します。 これが送信請求応答メッセージングなどの双方向操作の場合、この同じインターフェイスの SubmitResponseMessage メソッドが呼び出され、応答メッセージが送信されます。
すべてのメッセージがバッチに追加されると、アダプターは IBTTransportBatch インターフェイスの Done メソッドを呼び出して、バッチをトランスポート プロキシに送信します。 受信アダプターは本質的に非同期であるため、アダプターは新しいバッチをすぐに取得し、 Done を呼び出した後に他のメッセージの送信を開始できます。
バッチが処理されると、メッセージング エンジンは、トランスポート プロキシを使用してアダプターの BatchComplete コールバック メソッドを呼び出して、実際の呼び出しを行います。 送信の状態を含む BTBatchOperationStatus オブジェクトの配列がアダプターに渡されます。 各オブジェクトは操作の種類を表し、操作の全体的な状態と、操作の対象メッセージごとの状態を格納しています。 アダプターは、バッチ処理の状態を分析するため、次の順序でアクションを実行する必要があります。
BatchComplete メソッドにパラメーターとして渡された全体的なバッチ状態 HRESULT 値を確認します。 値が失敗となっている場合は、バッチの中の少なくとも 1 つの操作が正常に実行されていないことを示します。 したがって、バッチ全体の送信が 1 つのエンティティの失敗として扱われます。 この場合アダプターは、問題のあるメッセージを特定し、それ以外の問題のないメッセージをバッチとして再送信する必要があります。
バッチの全体的な状態が成功となっている場合は、トランスポート プロキシに送信されたすべてのメッセージがディスクに保存されたことを示します。 ただしこれは、パイプラインですべてのメッセージが正常に処理されたことを示すものではなく、 パイプラインでエラーとなったメッセージが中断されている可能性もあります。 パイプラインでエラーとなったメッセージがあっても、データはディスクに書き込まれているので、バッチの全体的な状態は成功となります。
パラメーターの各操作の種類の状態を
operationStatus
確認します。 状態がS_OK場合、この操作の送信は成功し、それ以上状態をチェックする必要はありません。 状態が に設定されている場合、 一 部のメッセージが中断BTS_S_EPM_MESSAGE_SUSPENDED。 BTS_S_EPM_SECURITY_CHECK_FAILED は、一部のメッセージが認証が必要な受信ポートで認証に失敗したことを示します。 E_FAILが返された場合、または 0 未満の値を持つ HRESULT が返された場合、この操作のメッセージ送信は失敗しました。それぞれの操作の種類の中で、メッセージごとに状態を確認します。 送信操作の種類では、送信が成功した場合、各メッセージの状態は S_OK に設定されます。 メッセージ が中断された場合、BTS_S_EPM_MESSAGE_SUSPENDEDが返されます。 BTS_S_EPM_SECURITY_CHECK_FAILED は、メッセージが認証を必要とする受信ポートで認証に失敗した場合に返されます。 パブリッシュ されたメッセージのサブスクライバーが存在しない場合は、E_BTS_NO_SUBSCRIPTIONが返されます。 E_FAILが返された場合、または 0 未満の値を持つ HRESULT が返された場合、メッセージの送信は失敗しました。
アダプターによっては、 E_FAIL または失敗した HRESULT を返すメッセージを中断できます。
BatchComplete メソッドは、実行の結果を示すために、S_OKまたはE_FAILを返す必要があります。 BatchComplete メソッドがE_FAILまたは負の HRESULT を返す場合、トランスポート プロキシはエラーをログに記録します。
バッチ処理に対応した受信アダプターを作成するときの、オブジェクト間の対話処理を次に示します。
メッセージのバッチを送信する受信アダプターのワークフロー
参照
アダプター変数
受信アダプターの開発
受信アダプターのインスタンス化と初期化
インプロセス受信アダプター用のインターフェイス
分離受信アダプター用のインターフェイス
バッチ処理に対応したトランザクション受信アダプター用のインターフェイス
要求 - 応答の同期受信アダプター用のインターフェイス