ポリシーを使用してエンドポイントをポーリングすることと、Durable Functions でモニタリング パターンを使用することの間に、最適な点はありますか? Azure Durable Functionsのドキュメントからわずかに変更された監視の例を使用して説明します。以下の例では、構成可能な秒数を使用してチェック間の待機を行っています。さらに、耐久性のある関数がチェックポイントと再生を行うためのオーバーヘッドがあります。
public static async Task Run(DurableOrchestrationContext ctx) {
int jobId = await ctx.CallActivityAsync<string>("StartJob", ctx.GetInput<MyData>());
int pollingInterval = GetPollingInterval();
DateTime expiryTime = GetExpiryTime();
while (ctx.CurrentUtcDateTime < expiryTime) {
var jobStatus = await ctx.CallActivityAsync<string>("GetJobStatus", jobId);
if (jobStatus == "Completed") {
await ctx.CallActivityAsync("SendAlert", machineId);
break;
}
var nextCheck = ctx.CurrentUtcDateTime.AddSeconds(pollingInterval);
await ctx.CreateTimer(nextCheck, CancellationToken.None);
}
}
StartJob アクティビティで開始される非同期ジョブが通常 1 ~ 2 秒以内に実行される場合、ある種のバックオフ ポリシーを使用して StartJob アクティビティでポーリングするのではなく、チェックポイントとリプレイにこのオーバーヘッドを追加する価値があるでしょうか?