可伸缩ASP.NET应用程序作业同步

时间:2014-08-15 10:09:02

标签: asp.net azure synchronization soa jobs

我的ASP.NET应用可以在多个虚拟服务器上运行(例如,在Azure中我可以按需扩展)。我不知道我将在哪里托管我的应用程序,无论是Azure还是其他托管服务,但我遇到了以下问题:
我需要在某个时间表上运行作业:获取汇率,它们应该适用于所有服务器实例,检查数据库和发送电子邮件,管理应用缓存或日志或在后台执行其他工作。
我不太了解的是如何构建/构建系统,以便这些工作只执行一次我不想在每个应用程序上提取汇率实例或多次发送电子邮件)。如此简单的Quartz.NET或QueueBackgroundWorkItem的用例并不适合我 我知道 Azure WebJobs 能够执行此类操作,但我确实希望解决方案不依赖于Azure等托管服务,因为可能明天我将要转移到另一个托管服务。

  • 这类问题是否存在通用解决方案?
  • 我可以使用与任何托管服务无关的服务总线构建此功能吗?
  • 使用Azure特定解决方案(WebJobs,Azure ServiceBus)而不是通用解决方案有什么好处?
  • 构建这部分应用程序的最佳实践是什么,以便我可以使用DI快速替换它?只是使用接口或其他东西抽象掉服务总线?

感谢。

1 个答案:

答案 0 :(得分:1)

您是否看过NServiceBus(以及Particular Service Platform)?它可以用作异步消息处理的与部署无关的API,并且可以部署到Azure以及您自己的服务器上。

在Azure上运行时,它会利用Azure Service Bus,在您自己的服务器场上,您可以选择MSMQ,RabbitMQ甚至SQL表作为传输。

NServiceBus非常重视依赖注入,因此测试解决方案非常容易。

希望有所帮助。

  • 完全披露:我是NServiceBus的原始作者,并领导其'目前的发展。