2011-01-28 13 views
5

Windows Azure上で実行される私のアプリケーションは、(Azure Queueに入れられる)ユーザーからの着信要求を処理し、実世界の人々に割り当てます。Azure - キューイング時間ベースのタスク

人々は、要求を処理するのに一定の時間があります。割り当てられた人の誰も要求を処理しなければ、私は新しい人の集合に移動する必要があります。基本的には、これらのタスクを特定の時間に処理するようにキューイングしてから、再度処理する必要があります。ユーザーの1人がタスクを処理する場合は、デキューする必要がありますので、再度ワーカーが処理しません。

+0

この質問は面白いです。私も同様のプロジェクトに取り組んでいます。それでも答えは求めている。 – Raptor

答えて

3

スケジュールされたタスクを使用する必要があります。そこに使用できる2つの良いライブラリがあります: Quartz.NetCastle schedulerです。

スケジューラを使用すると、このようなタスクが簡単になります。 処理時間が切れたときに実行されるジョブを作成するだけです。そこに未処理のリクエストがないかどうかチェックし、残っている場合は次の人に通知し、処理時間の終了後に別の予定された開始を開始するように設定します。

詳細が必要な場合はお知らせください。

私は、生産用アプリケーションでAzure WebロールでQuartz.netを使用しました。

+0

このスケールはどのようになっていますか? 10のWebロールを同時に実行している場合はどうなりますか?これは仕事の大規模な複製を作成しないでしょうか? –

+0

マーク、これは良い発言です。スケジューラは実際には1つのインスタンスごとに実行されます。スケジュールされたジョブがトリガーされると、空白のキューでメッセージをプッシュし、ワーカーの役割に任せます。同じメッセージがすでに存在するかどうかを確認することができます。しかし、まだ複数の等しいメッセージが空白のキューにある可能性があります。そのため、あなたの設計における冪等のために常に努力すべきです - この場合は、あなたのシステムがメッセージを何回も処理することから免れます。 – santiagoIT

+0

場合によっては冪等ができません。私の場合、私はこれ以上の弾力のあるものが必要です。 –

関連する問題