以编程方式安排Azure功能的一次执行
问题描述:
我已经浏览了Azure中WebJobs,函数和逻辑应用程序的文档,但是我找不到通过代码安排一次性执行过程的方法。我的用户需要能够安排通知在未来的特定时间发布(通常在几小时或一天内安排)。我在这些过程中读到的所有内容都是使用CRON表达式,它不是为一次性执行而设计的。我意识到我可以安排作业按间隔运行,并检查数据库以查看是否需要运行其余作业,但是我希望尽可能避免不必要地运行作业。任何帮助表示赞赏。以编程方式安排Azure功能的一次执行
如果是相关的,我使用的都是C#,ASP.NET MVC Core,App Services和一个SQL数据库,都在Azure中托管。我的计划是使用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);
见https://docs.microsoft.com/en-us/dotnet/api/microsoft.windowsazure.storage.queue.cloudqueue.addmessage?view=azurestorage-8.1.3,详细了解此重载方法addMessage的。
答
一种选择是使用ScheduledEnqueueTimeUtc属性在应用程序中创建Azure服务总线消息。这将在队列中创建消息,但只会在当时消耗。
然后,逻辑应用程序可能正在监听该服务总线队列并进行进一步的处理,例如, SendGrid,Twilio等..
HTH
你为什么不使用逻辑的应用程序触发一个HTTP触发功能? – M0rty