2017-05-22 28 views
1

私はタイマー(X分ごと)で呼び出される関数を持っていますが、この関数のインスタンスが一度に1つしか実行されないようにしたいと考えています。関数で起こっている作業は時間がかかるべきではありませんが、なんらかの理由でスケジュールされたタイマー(X分)よりも時間がかかる場合は、別のインスタンスを開始し、azure関数の最大実行時間

私が考えることができる最も簡単な方法は、関数の最大実行時間をX分に設定することです。私はApp ServiceとConsumptionの両方のプランで、たとえそれが異なるアプローチであっても、これをどのように達成するかを知りたいでしょう。私はまた、個々の機能レベルでこれを設定できるようにしたい。

このタイプの機能は、通常、FaaS環境に組み込まれていますが、私はそれを試している最中に苦労しています。これはfunction.jsonで可能ですか?あるいは、これが一度だけ実行されることを確認するためのさまざまな方法がありますか?

答えて

1

タイマー機能は、すでにこの動作を持っている(PS私は、タイムアウト付きのスレッドで作業をラップすることにより、自分自身のコードでこのしかし、私はより多くの慣用的な何かを期待していた可能性が知っている。。。) - 彼らは取りますAzureWebJobsStorageストレージアカウントからBLOBリースを取り出して、1つのインスタンスだけがタイマー機能を実行していることを確認してください。また、前のスケジュールされた実行が飛行中にタイマーは実行されません。

これはストレージ・キューと可視性タイムアウトで処理できます。キューの処理が終了したら、可視性タイムアウトの新しいキュー・メッセージを押して、希望のスケジュールと一致させます。


は私がfunctionTimeouthost.jsonプロパティは、あなたのすべての機能にタイムアウトを追加することを言及したいと思いますが、あなたの関数がタイムアウトエラーと再起動しますその関数のインスタンスで失敗します副作用があり、私はwouldnこの場合、それに頼ることはありません。

2

あなたはhost.json https://github.com/Azure/azure-webjobs-sdk-script/wiki/host.json

// Value indicating the timeout duration for all functions. 
// In Dynamic SKUs, the valid range is from 1 second to 10 minutes and the default value is 5 minutes. 
// In Paid SKUs there is no limit and the default value is null (indicating no timeut). 
     "functionTimeout": "00:05:00" 
に 'functionTimeout' プロパティを指定することができます
関連する問題