2017-11-14 13 views
2

Azure関数でセマフォ(ロック)が機能するかどうかは疑問です。 私は2つの別々のwebジョブを同時に実行したくありません。 webjobsは同じアプリサービスプランで生きています。Azure Web Jobのセマフォ

これはセマフォで保証できるものですか? (これにより、クロスプロセスロックが可能になります)

答えて

2

最初の質問:あなたは関数とWebJobについて話しています。どちらですか?

アプリケーションサービスプランがスケーリングを行う場合、2つのインスタンスが2つの異なるマシンで起動される可能性があるため、セマフォは機能しません。良いこと:(WebJobsの場合)そこには簡単な解決策があります。この例では

[Singleton] 
public static async Task ProcessImage([BlobTrigger("images")] Stream image) 
{ 
    // Process the image 
} 

、ProcessImage機能の単一のインスタンスは、任意の時点で実行されます。新しいイメージがイメージコンテナに追加されることによって関数がトリガされると、ランタイムは最初にロックを取得しようとします(blob lease)。取得されると、関数の実行中はロックが保持され(およびBLOBリースが更新され)、他のインスタンスは実行されません。この関数の実行中に別の関数インスタンスがトリガされた場合、定期的にポーリングするロックを待機します。 Azure WebJobs SDK - Singleton

編集:TimerTrigger seem to run as Singletonsに基づくもので実行:
をあなたはAzureの機能を使用している場合は、ここでより多くの情報を見つけることができます

タイマートリガーは、マルチインスタンスのスケールアウトをサポートします。特定のタイマー機能の単一のインスタンスがすべてのインスタンスにわたって実行されます。

関連する問題