1

例として、web と worker という 2 つの役割を持つホステッド サービスがあります。worker ロールを一時的に削除したい。これを達成する簡単な方法はありますか?それは些細なことのように思えるでしょう。

Azure ポータルで、ロールの 1 つを選択して STOP をクリックすると、ホステッド サービスのすべてのロールが停止します。Visual Studio では、"Roles" フォルダーからロールを削除して再公開できましたが、そのロールを再度開始するには、ロールを追加するプロセス全体を実行する必要があります。そして、一見不必要な公開。

4

4 に答える 4

1

このスレッドは数年前のものですが、この回答を書いているのと同じ問題がまだあります。

私が見つけたややクリーンな方法の 1 つは、ワーカー wole のサービス構成にブール値文字列を使用して設定を導入することです。

次に、WorkerRole.OnRun() で設定フラグを利用して、if ステートメントでコード実行パスに影響を与えることができます。

これはワーカー ロール インスタンスの実行を実際に停止するわけではなく、ロールの OnRun() の各ループ反復中に実際のワーカー コード パスが実行されないようにする「機能フラグ」パターンを追加するだけであることに注意してください。

これの利点は、Azure 管理ポータルから設定を更新すると、ロールが強制的に再起動され、新しい設定値が取得されることです。

短所は、コストを最小限に抑えるために worker ロールをオフにしようとしていた場合、ロール インスタンスが実行され続けるため、役に立たないことです。

HTH

于 2014-07-28T18:00:45.650 に答える
0

もう 1 つの解決策は、1 つの展開で Web ロールを実行し、別の展開でワーカー ロールを実行することです。ソリューションでロールが相互に直接通信する必要がない限り、問題ありません。たとえば、インスタンスがキューを介してそれぞれと通信する場合、両方のデプロイで同じストレージ接続文字列 (または Service Bus 名前空間) を利用できます。

個別のデプロイを行うことで、worker ロールが不要になったときにそれを破棄し、必要になったときに再デプロイするスクリプトを作成できます。Sandrino が提供した答えは機能しますが、影響を与えたくない Web ロールを含む VIP スワップと完全な展開が必要です。2 つの個別のデプロイを使用すると、これらを分離したままにして、必要な結果を得ることができます。

役割が共有の仲介者 (キューやデータベースなど) なしで互いに直接通信する必要がある場合、サンドリーノの答えはまともなオプションのようです。また、彼がリンクしている機能に必ず投票してください。

于 2012-08-08T10:24:23.917 に答える