2012-03-15 4 views
8

複数のインスタンスにWebロールをデプロイし、1つのインスタンスでのみ実行するタスクをスケジュールする必要がある場合(サイトに電子メールを送信するなど)いくつかの統計情報を持つ管理者)、どれだけ信頼できるのですか?でIdが終了した場合にのみ実行するように、1つのインスタンスでタスクを実行するには、RoleEnvironment.CurrentRoleInstance.Idを使用するのがどれくらい信頼できますか? 誰でもこれをやったことがあれば、彼のフィードバックに興味があります。CurrentRoleInstance.Idを使用して1つのインスタンスでタスクを実行

答えて

10

インスタンスからタスクを切り離すように、いくつかのより多くの作業が必要になることがあります。インスタンス0が再起動した場合(少なくとも月に1回)スケジューラまたはタスクランナーがオフラインです。

代わりの解決策は、インスタンスにまたがるタイプのミューテックスを使用することです。私が考えているのは、ブロブリースです。あなたは実際に書面のためにブロブのリースを取得することができます(そしてリースホルダは1つしかないかもしれません)。あなたは、タスクを実行する前にBLOBリースを取得しようとする可能性があります。あなたがそれを取得した場合は、タスクを実行します。そうしないと、実行しないでください。

多少の違い:スレッド(Run()メソッドから開始してみましょう)では、リースを取得しようとします。成功した場合は、スケジューラタスク(多分スレッドまたは何か)を起動します。リースを取得できない場合は、1分間寝てからもう一度お試しください。最終的に、リースのインスタンスが再起動されます(または、何らかの理由で消滅します)。数秒後、別のインスタンスが放棄されたリースを取得し、新しいスケジューラタスクを開始します。

Steve Marxは、リースを使用して並行性についてblog postと書いています。タイラーDoerksenはまた、リースについてgood postを持っています。 specificaly

<Startup> 
    <Task commandLine="StartUpTasks\WindowService\InstallWindowService.bat" executionContext="elevated" taskType="background" > 
    <Environment> 
    <Variable name="InstanceId"> 
     <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/@id"/> 
    </Variable> 
    </Environment> 
    </Task> 
</Startup> 

を必要に応じて

+0

おかげで、私はすでにsmarxのブログ記事を通り抜けました。それでも、インスタンスが再起動されたことについて完全にはわかりません。再起動後も、同じインスタンスIDを持つことになります。 もしそうなら、タスクが実行されるべきときに再起動される状況に対処することができます(たとえば、再起動直後に実行することによって)。 – ThomasWeiss

+1

私の主張は、常にスケジューラを実行したいということです。特定のインスタンスに依存する場合は、ダウンタイムが発生することが保証されます。また、*縮めるとどうなりますか?削除するインスタンスを指定することはできません。削除されたインスタンスが常に参照するインスタンスの場合はどうなりますか? –

+0

真。そのBLOBリースオプションを実装します。ありがとう。 – ThomasWeiss

0

複数のインスタンスがある場合は、実行中のロールインスタンスのIDを確認するなどして、実行ブロックのブロックを1回だけ実行することができます。

は、あなたは他のソリューションと同じ結果を得ることができますが、それらは私がインスタンスIDを使用することはありません

5

はい、あなたはそれが形にこの

%InstanceId% 

のようなバッチファイルで

<deployment Id>.<Application Name>.<Role Name>_IN_<index> 
Example mostly MyRole_IN_0, MyRole_IN_1 

アクセスenvironmet変数を以下のものであろうのInstanceIdを使用することができます続いて_の部分文字列または最後のインデックスを使用してInstanceIdからインデックスを取得します。 インデックス0のこのインスタンスが再起動しても同じインデックスを持つ場合。返信用

詳細 http://blogs.msdn.com/b/cclayton/archive/2012/05/17/windows-azure-start-up-tasks-part-2.aspx

http://msdn.microsoft.com/en-us/library/windowsazure/hh404006.aspx

関連する問題