質問

2 つのワーカー ロールがあり、Web ロールがない Azure アプリケーションを構築したいと考えています。ワーカー ロールが最初に起動するときに、ロールのうちの 1 つだけが一度に次のことを実行するようにします。

  • マスターファイルをダウンロードして解析し、マスターファイルのコンテンツに基づいて複数の「子」タスクをエンキューします
  • 単一のマスター ファイル ダウンロードの「子」タスクをキューに入れて翌日実行します

各「子」タスクは、タスク キューが使い果たされるまで、両方のワーカーによって実行されます。すべてのことを「ポンプの呼び水」と考えてください。

この種のことは、Web ロールを呼び出してキューに最初の「マスター」タスクを手動で追加する場合は非常に簡単ですが、自動開始モードで行うのは非常に難しいようです。

この点に関してご協力をいただければ幸いです。

ありがとう.....

役に立ちましたか?

解決

1つの可能性:Webロールを呼び出す代わりに、キューを直接ロードするだけです。 (これは、いくつかの作業を行うために自動的にスピンアップしてから再びシャットダウンしたいようなアプリケーションのようです...それを自動化している場合、キューの読み込みも自動化するのは簡単なはずです。)

(おそらく)より良いオプション:何らかのロックメカニズムを使用して、1つのワーカーインスタンスのみが初期化作業を行うようにします。これを行う1つの方法は、キュー(またはblob、またはテーブル内のエンティティ)を作成することです。既に存在する場合、他のインスタンスは初期化を処理しています。作成が成功した場合、それはこのインスタンスのジョブです。

初期化を行っているインスタンスが失敗した場合に備えて、ロックよりもリースを使用する方が常に良いことに注意してください。タイムアウトの使用を検討してください(例:テーブルストレージ、blobのメタデータ、またはキューの名前にタイムスタンプを保存する...)。

他のヒント

結局、まったく同じ種類の問題が発生したため、 O/Cマッパー (オブジェクトからクラウドへ)。基本的に、次の 2 種類のクラウド サービスを導入する必要があります。

  1. 利用可能なときにメッセージを消費する QueueService。
  2. スケジュールに基づいて操作をトリガーする ScheduledService。

次に、他の人が示唆したように、クラウドでは実際に使用することを好みます リース一時的なハードウェア (またはインフラストラクチャ) の問題によりクラウド アプリが永久にフリーズすることを避けるため、ロックの代わりに s を使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top