当经理创建任务并设置将来的激活日期时,它应该存储在数据库中。直到截止日期前一两天,才会向受关注的 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/