1

让我来解释一下我们已经做了什么,然后尝试实现的当前情景。如何使用SQL Server和Windows Azure通知集线器发送预定时间通知?

现有架构:在我们当前的架构中,我们有一堆服务和一个SQL Server数据库。这些服务允许移动设备(Android/IOS)允许用户注册/登录,然后设置他的日程安排,比如说“我需要在中午12点吃午饭”。

Android应用程序在当天结束时为第二天的设备轮询所有时间表,然后在第二天的适当时间显示这些时间表。

问题这种方法的缺点是,第一,可能(已报告给我)IOS不能做这样的事情保持在后台的时间表,然后当时间出现在显示和第二,这ISN”处理这种情况的最佳方式 - 如果用户在“移动应用完成其调度后”更改了“时间表”。


所以,我想出了一个架构来解决这个问题(提出的架构1),并在进一步的调查也认为处理这种不同的方式(提出的架构2),并提的是,太在这里下面。你能帮我解决我的查询,并试图了解什么会最好的工作:

建议Arch。 1:请看下图 - Proposed Architecture 1 - Diagram

这个架构非常简单。我们在此建议,我们可以使用SQL依赖关系+查询通知来了解计划表(其中包含所有计划以及何时用户添加,更新或删除计划,将引发查询通知)中的更改。这个SQL Server分开存在并且不在云上。

我们Azure的移动服务将有处理此查询通知,一旦它得到一个通知,它会以更新的时间表更新自己的Azure的SQL数据库,然后它会“提示”其自己的调度程序自定义下一次重新调用 - 即 - 调度程序将检查Azure SQL DB中的日程表,并且如果有通知要发送,则使用通知中心发送通知,然后重新调度自己为下一次当它发送通知时

现在最大的任务使用这种方法是 - 我们非常肯定,我们可能有数百甚至数千用户同时更新他们的时间表 - 当发生这种情况时,我不是用户该架构如何表现 - 它会中断吗? - 另外,如果调度程序运行并发现它必须发送1000个特定时间的通知,比如说下午6点,它是否会在不中断的情况下发送通知中的等待时间 - 例如通知本来应该在下午6:00发送大约下午6:05


是越来越发送一边想着这个问题,我们想出了这个未来提出的架构:

建议拱门。 2:

在这个架构下,我们认为为什么不把调度的东西转移到SQL服务器上,并创建一个每分钟运行的作业(因为没有人会在一分钟内设置一个时间表 - 即 - 一个人将在下午6:35设置时间表,而不是在6:35:09 pm)

此外,此过程仅涉及SQL CLR对象和通知中心,并且不包含Azure移动服务或Azure SQL数据库。

因此,该过程将是这样的:

  • 一个SQL Server作业将被安排运行每隔一分钟
  • 说,如果这项工作开始于下午5:00它的外观是否有是下午5点1分的任何预定通知 - 如果是,则开始发送其通知
  • 如果不是,则默默结束,然后在下午5:01重新调用以查看是否有任何时间表5:02 pm
  • 继续以相同的方式直到明确停止

主要关心的是,这将工作?

对于每一分钟安排一项工作(即使SQL Server具有该选项)是否是一种很好的做法?

如果在下午5点01分发现它有1万个通知要在5:02 pm发送,该怎么办?它将能够发送所有的这些

顺便说一句,在这个架构中发送,我们会使用Azure的通知中心的通知,并会有一个SQL CLR函数说,“发送通知”,将勾此通知中心,并在预定作业调用时发送通知。

请给我建议其他链接,指出更好的处理方式。我的客户非常关心我们如何处理通知的方式,如果我们一次不得不发送太多的邮件,我们会尽快给您回复。

非常感谢所有回答/评论者! :)

回答

1

您是否探索过可能使用通知中心的SendScheduledNotifications API。你可以在这里阅读更多关于它的信息:https://msdn.microsoft.com/en-us/library/azure/dn790626.aspx

+0

是的,发送预定通知本身是我自己探索的内容 - 但是 - 使用起来会非常棘手,因为用户可能实际上甚至取消了时间表或者在最后几分钟内完全更改了该通知,并且这可能会导致甚至当不需要的时候不小心向他发送通知 - 顺便说一句,你会如何建议将通知发送给用户,例如,希望通知在12:10 PM。 –

相关问题