4

バックグラウンド処理の一部を Azure Web ロールから worker ロールに移動しています。私のワーカーは 1 分ごとにタスクを実行する必要があり、タスクを生成する可能性があります。

while(true){
    //start some tasks

    Thread.Sleep(60000);
}

展開すると、永久に実行されます。後で再デプロイするときに、Azure は再デプロイのプロセスをどのように停止しますか?

即死させるだけですか?シャットダウンしていることを警告する方法はありますか? すべてがトランザクション対応であることを確認する必要がありますか?

4

1 に答える 1

10

ロール (ワーカーまたは Web) を正常にシャットダウンするように求められると (ロールが縮小されているか、再デプロイを要求したため)、RoleEntryPoint クラスのOnStopメソッドが呼び出されます。これは、おそらくループを含むか、そのループを含むコードを呼び出す Run メソッドを持つ同じクラスです。

ここで注意すべき点がいくつかあります。OnStop は実際に停止するまで 5 分かかり、その後プロセスは単純に強制終了されます。非同期でシャットダウンするために何か他のものを呼び出す必要がある場合は、そのプロセスがシャットダウンされるまで OnStop のスレッドをビジー状態にしておく必要があります。実行が OnStop を離れると、プラットフォームはマシンをシャットダウンできると想定します。

処理を正常に停止する必要があるが、マシンのシャットダウンは必要ない場合は、サービス構成ファイルに設定を入れて、作業を行う必要があることを示すか、またはメモするように更新できます。たとえば、"ProcessQueues" という bool です。次に、RoleEntryPoint の onStart で、RoleEnvironmentChangingイベントをフックします。次に、イベント ハンドラーは RoleEnvironmentConfigurationSettingChange の発生を探し、ProcessQueues bool をチェックします。true の場合は、処理を開始または続行します。 false の場合は、処理を適切に停止します。次に、構成を変更して、実行中かどうかを制御できます。これはこれを処理するための 1 つのオプションであり、処理を停止する必要がある速度などに応じて、さらに多くのオプションがあります。

于 2012-09-30T15:53:05.430 に答える