1

了解しました。これは不可能だと約90%確信していますが、とにかく質問したいと思いました。多分私は何かが欠けています。

トランザクションバッチ処理でMSMQよりもWCFを使用しようとしています。簡単に言うと、一度に200〜300kのメッセージが含まれるキューがあり、それらをデータベースに配置する必要があります。それらは最終的にServiceBrokerを通過しますが、MSMQクライアントで前処理を行った後でのみです。

アイデアは、一度にできるだけ多くのメッセージを取得し(そして、私のインフラストラクチャによってサポートされ)、それらを前処理してから、テーブル変数でSQL Serverに送信し、最終的にServiceBrokerキューに入れます。

トランザクションバッチ処理では、トランザクションごとに実際にN(100、1000など)のメッセージが表示されますが、それらはすべてWCFクライアントに順番に送信されます。したがって、サービス操作は、メッセージごとに1回、N回呼び出されます。トランザクションは、操作が最後のメッセージに対して戻った後、フレームワークによってコミットまたはロールバックされます。

私の考えは、それらすべてをコレクションに入れて、コレクション全体の処理をすぐに開始し、それをデータベースに送信する方が効率的であるということでした。

ある種のトリック(静的なものに保存し、Nを押して処理を開始するなど)を行うのはあまり良いことではなく、避けようとしています。

まだ書いていなかったので、投稿するコードはありません。私は以前にトランザクションバッチ処理を行ったことがありますが、これは不可能であると信じがちです。

最終的には、WCFクライアントとReceive()その中の地獄をMessageQueueTransaction、もちろん分散トランザクション(SQL Serverまで)にラップしてドロップします。

しかし、リストを取得し、WCFによって作成されたデフォルトの分散トランザクションをいじらず、静的コレクションに何も保持しないようにするためのサポートされている方法を知っていますか?

ありがとう!

4

1 に答える 1

1

私もありえないと思います。MSMQ を直接操作した場合は、メッセージを 1 つずつしか取得できないことがわかります。

WCF (MSMQ 経由) と MSMQ には大きな違いがあります。前者はプッシュ ベースで、後者はプル ベースです。ダイレクト MSMQ に切り替えることができればN、そこからメッセージを取り出してバッチで処理/保存するのは簡単です。MSMQ に対するプログラミングは、WCF よりもはるかに簡単です。

于 2012-07-05T17:00:29.333 に答える