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

How to enable reminders from an Azure based MVC application?

当经理创建任务并设置未来的激活日期时,它应该存储在数据库中。直到到期前一两天,才会向相关员工发送任何消息。时间快到了,正在给下属发邮件

以前我已经解决了使用本地 运行 Windows 服务来安排消息传递的问题。然而,当我在 Azure 中实现类似的东西时,我不确定如何解决它(除了在云中实际托管我自己的 Windows 服务器,当然,但有点打败了整点) .

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

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

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

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

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

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

如果您使用 Azure Storage Queue,您感兴趣的 属性 是 InitialVisibilityTimeout。有关详细信息,请参阅此线程:Azure storage queue message (show at specific time).

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