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

时间:2017-09-24 23:45:45

标签: azure azure-sql-database azure-webjobs azure-functions azure-logic-apps

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

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

4 个答案:

答案 0 :(得分:1)

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

您也可以使用Azure Event Grid。根据{{​​3}}文章,您可以“在数据库中有新记录后通过触发逻辑应用程序来扩展现有工作流程”。

希望这有帮助。

答案 1 :(得分:1)

您可以将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

答案 2 :(得分:0)

一种选择是使用ScheduledEnqueueTimeUtc属性在应用程序中创建Azure Service Bus消息。这将在队列中创建消息,但此时只能消耗。

然后,逻辑应用程序可以监听该服务总线队列并进行进一步处理,例如SendGrid,Twilio等...

HTH

答案 3 :(得分:0)

其他答案都是有效选项,但还有其他一些答案。

对于Logic Apps,您可以按照Scheduler migration guide中的说明将此行为内置到应用程序中。此处描述的解决方案是使用http触发器创建一个逻辑应用程序,并将所需的执行时间传递给该触发器(在发布数据或查询参数中)。然后,可以使用“延迟至”块将以下步骤的执行推迟到传递给触发器的时间。 您必须更改逻辑应用程序以支持此操作,但是取决于用例,这可能不是问题。

对于Azure功能,可以使用支持Durable FunctionsTimers实现类似的模式。