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

标签 c# asp.net-mvc azure scheduled-tasks

当经理创建任务并设置将来的激活日期时,它应该存储在数据库中。直到截止日期前一两天,才会向受关注的 worker 发送任何消息。时间一到,就会向下属发送电子邮件。

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

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

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

最佳答案

其他可能的解决方案是使用排队机制。您可以使用Azure 存储队列服务总线队列

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

如果您使用的是 Azure 存储队列,您可能感兴趣的属性是 InitialVisibilityTimeout。请参阅此线程了解更多详细信息:Azure storage queue message (show at specific time) .

如果您使用的是 Azure 服务总线队列,您可能感兴趣的属性是 BrokeredMessage.ScheduledEnqueueTimeUtc。您可以在这里阅读有关此属性的更多信息:https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.scheduledenqueuetimeutc.aspx .

关于c# - 如何从基于 Azure 的 MVC 应用程序启用提醒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36675555/

相关文章:

c# - Environment.TickCount 是不够的

asp.net-mvc - Ninject 单例范围

c# - Owin Context 每个请求使用一个实例

asp.net-mvc - datetime.parse 在西类牙语中进行游行失败,每隔一个月就可以

python - df = pd.read_csv ('iris.csv' ) 指向 azure blob 报告中的文件 [errno 2] 没有这样的文件或目录

azure - 使用 Azure 数据工厂获取复制的即时文件名

node.js - 部署后如何修复 Azure 上的 "cannot find module ../"

c# - 找不到路径的一部分 C#

c# - 如何将 Rx Observable 与通用 EventHandler<T> 一起使用?

c# - 接口(interface)中的私有(private)成员