在使用策略轮询端点和使用具有持久功能的监控模式之间是否存在最佳点?我将使用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 活动中启动的异步作业通常在一两秒内执行,是否真的值得为检查点和重放添加此开销,而不是使用某种类型的退避策略在 StartJob 活动中轮询?