如何从基于Azure的MVC应用程序启用提醒

本文关键字:应用程序 MVC 启用 Azure | 更新日期: 2024-09-20 02:19:53

当经理创建一个任务并设置未来的激活日期时,它应该存储在DB中。直到到期前一两天,才会向受尊敬的员工发送任何信息。当时间临近时,会向下属发送一封电子邮件。

以前我已经解决了使用本地运行的Windows服务来调度消息的问题。然而,当我在Azure中实现类似的东西时,我不知道如何解决它(当然,除了在云中托管我自己的Windows Server之外,但有点违背了这一点)。

由于我的MVC应用程序是严格的事件驱动的,我在Azure门户中浏览了一下,找到了一个实用程序来调度或推迟调用的方法。运气不好。因此,目前,所有电子邮件都会立即分发,并通过将邮件保留在收件箱中直到时间到(或手动设置约会)来执行日程安排。

我应该如何处理这个问题?

如何从基于Azure的MVC应用程序启用提醒

其他可能的解决方案是使用Queueing机制。您可以使用Azure Storage QueuesService Bus Queues

它的工作方式是,当任务被创建并保存在数据库中时,您将在队列中写入一条消息。此消息将包含有关任务的详细信息(可能是任务id)。但是,默认情况下,该邮件将不可见,并且只有在一定时间后才会可见(您将根据需要发送电子邮件的时间来计算这段时间)。当可见性超时期限到期时,消息将变为可在队列中使用。然后,您将有一个带有Queue触发器的WebJob(即,当队列中有消息时,WebJob将变为活动)。在WebJob代码中,您将从数据库中获取任务信息,并将通知发送给相关人员。

如果您使用的是Azure Storage Queue,那么您感兴趣的属性是InitialVisibilityTimeout。有关更多详细信息,请参阅此线程:Azure存储队列消息(在特定时间显示)。

如果您使用的是Azure Service Bus Queue,那么您感兴趣的属性是BrokeredMessage.ScheduledEnqueueTimeUtc。您可以在此处阅读有关此属性的更多信息:https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.scheduledenqueuetimeutc.aspx.

运行后台任务的一个解决方案是使用Web作业。Web作业可以按计划运行(比如说每天运行一次),可以手动运行,也可以由队列中的消息触发。

您可以使用Azure WebJobs。基本上,创建一个WebJob并安排它定期检查数据库中的数据,以了解即将执行的任务,然后通知人们。