一連のメッセージを含むファイルを入力として受け取るBizTalkアプリケーションを開発しました。BizTalk XML逆アセンブラコンポーネントを使用して、個別のメッセージでファイルを「デバッチ」します。これらの各メッセージは、メッセージを変換してwcfサービスを呼び出すオーケストレーションによってMessageBoxから取得されます。
私が今経験している問題は、各バッチに1000個のメッセージが含まれており、それらの1000個のメッセージがすべて一度にwcfサービスを呼び出しているように見えることです。wcfサービスはこれらのメッセージによって「爆撃」され、10個のメッセージのみを並行して処理するように構成され(各呼び出しはデータを処理し、データベースにデータを配置する必要があります)、一連の「TooBusy」例外をBizTalkに返します。1分後に接続を再試行するようにwcfアダプターを構成しました。
その結果、BizTalkは最初にメッセージをデバッチし、次にwcfサービスを1000個のメッセージすべてで爆撃し、「ビジー状態」の例外を大量に取得し、何もしないで1分が経過するまで待機してから、もう一度爆撃します。の上。
その特定のwcfサービスへの最大10の接続を開くようにBizTalkを構成できれば、処理ははるかに効率的になりますが、私が知る限り、これは不可能です。(wcfサービスはnet.tcpを使用するように構成されています。)
私はすでにいくつかの異なる方法でホストのスロットル設定を試しましたが、それが役に立たないか、アプリケーションが耐えられないほど遅くなっています。また、BizTalkのスロットルは、最初にサービスを爆撃し、次に爆撃中であることに気づき、しばらく何もしないで待機し、スロットルを上げて再び爆撃を開始する方法で実装されているようです。リクエスト/メッセージを細かくする方がはるかに良いようです。そうすれば、それらは時間内により均等に分散されます。たとえば、1秒あたり最大4つのメッセージを受信するようにWCFアダプタを設定したいと思います。現在可能なスロットルは、次のようになります。5秒のスライディングウィンドウで、20を超えるメッセージがある場合にスロットルをアクティブにします。しかし、それは「バースト」効果を可能にするため、同じではありません。
スループットを向上させる方法はありますか?