5

我需要每 50 秒左右将一些数据写入数据库。它类似于在后台运行并静默执行其工作的 Windows 服务。在我的情况下,启动和停止不是一个选项,因为我需要将少量先前插入的数据存储在内存中。使用 Windows Azure 或 AWS 时,最好的解决方案是什么?

谢谢你。

4

3 回答 3

7

使用 Windows Azure,您可以选择 Web 或 Worker 角色(基本上都是 Windows 2008 Server R2 或 SP2)并拥有某种类型的定时事件,正如 @Lucifure 建议的那样。您还可以运行调度程序,如 Quartz.net,或利用 Windows Azure 队列或服务总线队列在特定时间显示消息。但是:您不能在给定的角色实例中拥有“永久”任务,因为您的 VM 实例将定期重启(例如,每月进行主机操作系统维护)。使用角色关闭,您会收到通知,您可以在Stopping()或中处理这些关闭通知OnStop()。如果您有多个实例,您可以使用调度程序或队列来确保您的事件仍然每 50 秒左右触发一次,并跨多个实例进行处理(但在任何给定时间仅由一个实例处理)。

为了保存您的内存信息,一个想法是将该信息存储在缓存中。您有 2 个选择:

  • 分布式(共享)缓存服务,已经存在了一段时间。它独立于您的角色实例运行。
  • 内存缓存,2012 年 6 月刚刚推出。假设您有多个实例,缓存分布在这些实例中。您甚至可以在现有角色的内存中运行缓存。

更多关于缓存的信息在这里

有一些关于 Quartz.net 和 Windows Azure 的 StackOverflow 答案,例如这个

于 2012-06-28T01:20:24.170 回答
2

在 Windows Azure 上,您可以使用 Worker Role,它可以做到这一点。它可以像一个while循环一样简单。

试试这篇文章的介绍。 http://www.c-sharpcorner.com/uploadfile/40e97e/windows-azu-creating-and-deploying-worker-role/

于 2012-06-27T22:50:32.653 回答
1

您可以将 System.Threading.Timer 设置为每 50 秒左右触发一次,并在事件发生时执行您的工作。

于 2012-06-28T00:04:40.250 回答