以编程方式安排Azure功能的一次执行

问题描述:

我已经浏览了Azure中WebJobs,函数和逻辑应用程序的文档,但是我找不到通过代码安排一次性执行过程的方法。我的用户需要能够安排通知在未来的特定时间发布(通常在几小时或一天内安排)。我在这些过程中读到的所有内容都是使用CRON表达式,它不是为一次性执行而设计的。我意识到我可以安排作业按间隔运行,并检查数据库以查看是否需要运行其余作业,但是我希望尽可能避免不必要地运行作业。任何帮助表示赞赏。以编程方式安排Azure功能的一次执行

如果是相关的,我使用的都是C#,ASP.NET MVC Core,App Services和一个SQL数据库,都在Azure中托管。我的计划是使用Logic应用程序来检查预定事件的数据库,并通过Twilio,SendGrid和iOS/Android推送通知发送通知。

+0

你为什么不使用逻辑的应用程序触发一个HTTP触发功能? – M0rty

您可以使用Azure自动化使用REST API以编程方式计划任务。了解它here

也可以使用Azure事件网格。基于this文章中,你可以“通过触发逻辑应用程序扩展现有的工作流程,一旦在你的数据库中的新记录”。

希望这有助于。

你可以使用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