X 秒ごとに処理するキューに入れられた WCF サービス
-
25-09-2019 - |
質問
設定された時間間隔でキューに入れられたリクエストを処理できるサービスを作成する必要があります。たとえば、Web にアクセスしてサイトから財務データを取得するには、リクエストを 1 秒あたり 1 回に制限する必要があります。私は WCF を初めて使用するので、(1) WCF と MSMQ がこれを実装するための適切な選択であるかどうかわかりません。(2) もしそうなら、間隔を強制するための最良のメカニズムは何ですか?スレッド待機?タイマー(それがどのように機能するかはわかりません)。
解決
あなたはまだ仕事にすべてを自分で行う必要があると思いますので、あなたは、明示的にこれを処理することができるようになるWCFに組み込まれたものは何もありません。
あなたのサービスは確かにMSMQからのリクエストを処理することができますが、WCFでMSMQリスナーが選ぶとすぐに、できるだけプロセスメッセージます。あなたが(それはすべてが素晴らしいことではないでしょうあなたは偽それが適切なツールを与えられた可能性がありますが、私には思える)X秒ごとにのみプロセスメッセージにそれらを設定することはできません。
要求の処理の間に、あなたの遅延が非常に短くない場合は、1つのオプションは、保留中の要求を保持するために、中間キューを使用することです。それはdifferetキュー上のWCFサービスリッスン(キューB)しながら、誰もが直接、(キューA)に耳を傾けていないキューに書き込ま本当の要求を送信何でも、です。次に、キューBにキューAからX秒ごと/分/何と移動だけで1メッセージ一度実行すると、このように実行するために、実際のWCFサービスをトリガすること(タスクスケジューラからスクリプトの実行など、単純なようかもしれない)何か他のものを持っています。
他のヒント
WCF と MSMQ は素晴らしいチームです。ぜひチェックしてみる価値があります。
WCF がそのままでは提供しない部分は、「x 秒ごとのチェック」です。ここでの最善のアプローチは、Windows NT サービス内で WCF サービスをホストし、x 秒ごとに 1 回だけ MSMQ キューをチェックするタイマーを NT サービス内に設けることです。実際、実装するのはそれほど難しいことではありません。美しさは次のとおりです。ほんの数行のコードを書くだけで、NT サービス内で WCF サービスを非常に簡単に自己ホストでき、何がいつ行われるかを完全に制御できます。MSDN ドキュメントを参照してください。 マネージド アプリケーションで WCF サービスをホストする方法 詳細については。
リソース:
- Tom Hollander のブログ投稿シリーズ MSMQ、WCF、IIS:彼らに素敵なプレイをさせる
- モトリーキュー:MSMQ と WCF の概要
- WCF を使用した MSMQ の SOA 化 (およびその価値がある理由)
それともだけではなく、メッセージを消費するために、ウィンドウのサービスを使用することができます。あなたはすぐにそれが掲載されると、メッセージを消費するのWCF機能を使用していない場合、あなたはおそらく最初の場所でWCFを使用する理由がない。