設定された時間間隔でキューに入れられたリクエストを処理できるサービスを作成する必要があります。たとえば、Webにアクセスしてサイトから財務データを取得するには、リクエストを1秒に1回に制限する必要があります。私はWCFを初めて使用しますが、(1)MSMQを使用したWCFがこれを実装するための適切な選択であるかどうかわかりません。(2)もしそうなら、間隔を強制するための最良のメカニズムは何ですか?スレッド待機?タイマー(それがどのように機能するかわからない)。
3 に答える
これを明示的に処理できるWCFには何も組み込まれていないため、すべての作業を自分で行う必要があります。
サービスは確かにMSMQからの要求を処理できますが、WCFのMSMQリスナーはできるだけ早くメッセージを選択して処理します。X秒ごとにのみメッセージを処理するように構成することはできません(適切なツールがあれば偽造することもできますが、それほど素晴らしいとは言えません)。
リクエストの処理間の遅延がそれほど短くない場合の1つのオプションは、保留中のリクエストを保持するために中間キューを使用することです。つまり、実際の要求を送信するものはすべて、誰も直接リッスンしていないキュー(キューA)に書き込みますが、WCFサービスは別のキュー(キューB)でリッスンします。次に、X秒/分などごとに1回実行され、キューAからキューBにメッセージを1つだけ移動して、実際のWCFサービスの実行をトリガーする他の何か(タスクスケジューラから実行されるスクリプトのように単純な場合があります)を用意します。
WCFとMSMQは素晴らしいチームです!間違いなくチェックする価値があります。
WCFが箱から出して提供しない部分は、「x秒ごとにチェックする」です。ここでの最善のアプローチは、Windows NTサービス内でWCFサービスをホストし、NTサービス内にx秒ごとに1回だけMSMQキューをチェックするタイマーを設定することです。本当に、実装するのはそれほど難しいことではありません。優れている点は、NTサービス内でWCFサービスを非常に簡単にセルフホストできることです。わずか数行のコードで、何がいつ発生するかを完全に制御できます。詳細については、管理対象アプリケーションでWCFサービスをホストする方法に関するMSDNドキュメントを参照してください。
資力:
- MSMQ、WCF、IISに関するTom Hollanderのブログ投稿シリーズ:それらをうまく機能させる
- Motleyキュー:MSMQとWCFのはじめに
- WCFを使用したMSMQのSOA化(およびその価値がある理由)
または、代わりにウィンドウサービスを使用してメッセージを使用することもできます。投稿されたらすぐにメッセージを消費するWCF機能を使用していない場合は、そもそもwcfを使用する理由がない可能性があります。