4

私は以前、重大なエラーが発生したときに自動的に停止できるいくつかの Windows サービスに取り組んでいました。

それらを Windows Azure に移行し、WorkerRole で同じことをしたいと思います:内部から WorkerRole の実行を停止できるようにすることです。

少し問題が発生しただけです...

Runメソッドが終了すると、WorkerRole OnStopメソッドがトリガーされ、その後再開されます...私が読んだことから、これは WorkerRole の通常の動作です。

次に、私の質問は次のとおりです。「ジョブが完了しました。再起動しないでください」と伝える方法

4

6 に答える 6

3

特定のロール インスタンスを停止することはできません。たとえば、3 つのインスタンスから 1 つのインスタンスにスケールダウンできますが、どのインスタンスを終了するかを選択することはできません。

起動し、何かを処理してからシャットダウンする (たとえば、1 日 1 回) 必要がある単一インスタンスのワーカー ロールについて話している場合は、このロールを独自のデプロイに移動することを検討してください。次に、管理 API を使用してデプロイし、1 時間 (または必要に応じて) 実行してから、一時停止して削除します。

于 2011-04-22T14:28:44.793 に答える
2

これが実際に可能かどうかはわかりません。あなたが使用することができます

Thread.Sleep(Timeout.Infinite);

しかし、worker ロールはクラウドにデプロイされているため、まだ料金を支払う必要があると思います。これを実際に停止する唯一の方法は、Azure Platform からロール全体を一時停止することです。

于 2011-04-22T09:00:05.707 に答える
0

最近、私は同じ問題に遭遇します。私の問題は、ServiceConfiguration.Cloud.cscfg、ServiceConfiguration.Local.cscfgおよびServiceDefinition.csdefファイルからワーカーロール部分にコメントを付け、プロジェクトをパッケージ化することで修正されています。

于 2013-01-28T09:12:37.950 に答える
0

特定の役割が 1 つのインスタンスのみを使用する場合、管理 API を使用してその役割のインスタンス数を 0 に減らすことができます。特定のロールの切り替えはサポートされている機能ではありませんが、特定のインスタンスで呼び出して同時にインスタンスの数を減らすことができるキル スイッチ サービスを構築することで機能させることができます。これには少し配管コードが必要ですが、実行可能です。

于 2011-04-22T14:07:26.503 に答える
0

Thread.Suspend() http://msdn.microsoft.com/en-us/library/system.threading.thread.suspend.aspxを使用できると思います。もう一度再開したい場合は Thread.Resume() を使用します

于 2011-06-17T00:29:53.417 に答える
0

私があなたの質問を正しく読んでいれば....ワーカーロールプロセスは停止していますが、再び開始されますか?

worker ロールが長時間実行されると、本質的に再起動するという問題が発生しました。何が起こるかというと、Azure は、長い時間 (通常は 30 秒) 後にロールがハングしたと見なし、メッセージをワーカー キューに書き戻して、プロセスが完了したことを確認します。

私はここで突き刺していますが、あなたのシナリオでは、worker ロールを停止してもメッセージが Worker Role メッセージ キューから削除されない可能性はありますか? その場合は、プロセスを終了する前に、処理中のメッセージを明示的に削除する方法があるかどうかを確認することをお勧めします。

詳細はこちら

http://guerillaprogrammer.com/jakew/post/2010/03/23/Expiring-Azure-Queue-Message.aspx

于 2011-04-22T21:13:24.300 に答える