我查看了Azure中的WebJobs,函数和逻辑应用程序的文档,但我找不到通过代码安排一次性执行进程的方法。我的用户需要能够安排通知在将来的特定时间出去(通常在预定的几小时或一天内)。我在这些进程上阅读的所有内容都使用的CRON表达式并非专为一次性执行而设计。我意识到我可以安排作业间歇运行并检查数据库以查看是否需要运行其余的工作,但我希望尽可能避免不必要地运行作业。任何帮助表示赞赏。
如果它是相关的,我使用的是C#,ASP.NET MVC Core,App Services和一个所有托管在Azure中的SQL数据库。我的计划是使用Logic应用程序检查数据库中的预定事件,并通过Twilio,SendGrid和iOS / Android推送通知发送通知。
您可以使用具有延迟可见性的Azure队列触发器。这将使消息在指定的超时时间内不可见。这方便地充当计时器。
CloudQueue queueOutput; // same queue as trigger listens on
var strjson = JsonConvert.SerializeObject(message); // message is your payload
var cloudMsg = new CloudQueueMessage(strjson);
var delay = TimeSpan.FromHours(1);
queueOutput.AddMessage(cloudMsg, initialVisibilityDelay: delay);
有关AddMessage重载的更多详细信息,请参阅https://docs.microsoft.com/en-us/dotnet/api/microsoft.windowsazure.storage.queue.cloudqueue.addmessage?view=azurestorage-8.1.3。
一种选择是使用ScheduledEnqueueTimeUtc属性在应用程序中创建Azure Service Bus消息。这将在队列中创建消息,但此时只能消耗。
然后逻辑应用程序可以监听该服务总线队列并进行进一步处理,例如, SendGrid,Twilio等......
HTH