私は、サーバーで処理するために、クライアントでかなりタイトなループで数千のメッセージを生成する可能性のあるアプリケーションに取り組んでいます。イベントのチェーンは次のようなものです。
- クライアントはアイテムを処理し、ローカル キューに入れます。
- ローカル キュー処理がメッセージを取得し、Web サービスを呼び出します。
- Web サービスは、サーバー上のサービス バスにメッセージを作成します。
- Service Bus はデータベースへのメッセージを処理します。
Web サービスには多くのクライアントが存在するため、すべての通信が非同期であるという考え方です。MSMQ がこれを直接実行できることは知っていますが、セキュリティなどを設定するためのその種の管理機能がクライアントに常にあるとは限りません。
私の質問は、各段階でのメッセージの粒度についてです。最も単純な方法は、クライアントで処理される各アイテムが 1 つのクライアント メッセージ/Web サービス呼び出し/サービス バス メッセージを生成することを意味します。それは問題ありませんが、可能であれば Web サービスの呼び出しをバッチ処理する方がよいことはわかっています。ただし、大粒度の Web サービス DTO とデータベースでの実行時間の短いトランザクションとの間にはトレードオフがあります。この特定のシナリオでは、すべてのアイテムが処理されるか、まったく処理されない「ビジネス トランザクション」は必要ありません。メッセージ サイズと Web サービス呼び出しの数とデータベース トランザクションの最適なバランスを実現することを目指しています。
何かアドバイス?