【问题标题】:How to enable reminders from an Azure based MVC application?如何从基于 Azure 的 MVC 应用程序启用提醒?
【发布时间】:2016-08-09 02:28:58
【问题描述】:

当经理创建任务并设置将来的激活日期时,它应该存储在数据库中。直到到期前一两天,才会向受尊敬的工人发送任何消息。时间一到,就给下属发了一封邮件。

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    它的工作方式是在创建任务并将其保存在数据库中时,您将在队列中写入一条消息。此消息将包含有关任务的详细信息(可能是任务 ID)。但是,默认情况下该消息是不可见的,并且仅在一定时间后才可见(您将根据需要发送电子邮件的时间来计算此时间段)。当可见性超时期限到期时,消息将在队列中可供使用。然后您将拥有一个带有Queue 触发器的WebJob(即当队列中有消息时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

    【讨论】:

    • 这也是一个值得考虑的好方法。它使您免于定期检查数据库。当消息浮出水面时,是时候处理它了,这意味着发送提醒。不过要注意的一件事是,如果您的业务逻辑允许修改激活日期或删除任务等,那么您还需要更新队列中的相应消息。
    【解决方案2】:

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

    【讨论】:

    • 你说一个解决方案。还有其他(同样整洁的)方法吗?请同时查看对其他答案的评论。
    【解决方案3】:

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

    【讨论】:

    • 这对我来说是新的。不过,听起来很有趣。所以你说你设置了一个使用 JavaScript(根据你的链接这是有效的扩展之一)的网络作业,它基本上调用一个动作方法(比如说 SendReminders)每个偶尔?
    • 您可以根据现有逻辑执行此操作,也可以简单地在该网络作业中发送提醒。您也可以通过编写一个处理发送提醒的 Runbook,然后使用一个调用该 Runbook 的 Webhook 来使用 Azure 自动化实现不同的操作。您仍然需要定期检查即将执行的任务并调用 webhook 的东西,并且这些东西也可以是 webjob。有不同的方法,但我会选择网络作业。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多