Lea*_*sed 8 c# asp.net-mvc daemon windows-services hangfire
我有一个asp.mvc应用程序驻留在服务器上.从这个应用程序,我想启动一个有点长时间运行的进程,将是资源密集型操作.
所以我想做的是我希望有一些像3这样的用户代理,它将在3台机器上运行,而这个用户代理只会使用各自机器的资源.
就像在Hadoop中一样,我们有主节点和集群,其中任务在单个集群上运行,并且有1个主节点跟踪所有这些集群.
在Azure中,我们有运行任务的虚拟机,如果需要,Azure可以通过启动新实例来自动扩展,以加快任务.
所以我想创建这样的基础设施,我可以从mvc应用程序向3个用户代理提交我的任务,我的应用程序将跟踪这些代理,例如哪个代理是免费的,哪个是被占用的,哪个不是这样的.
我希望从每个用户代理接收进度并在我的MVC应用程序上显示.
在.net中是否有任何框架可以管理这个后台运行操作(跟踪,启动,停止等等)或者应该采用什么方法?
更新:我不想为这个长时间运行的操作加载大量服务器,而且我想跟踪这个长时间运行的进程,就像他们正在做的那样,错误等等.
以下是我正在思考的方法,我不知道哪个更有意义:
1)以2-3台计算机的代理形式安装Windows服务,以利用resp资源并打开与此代理的tcp/ip连接,除非并且直到长时间运行的过程完成.
2)使用hangfire在IIS线程之外运行这个长时间运行的进程,但我想这会将负载放在服务器上.
我想知道上述方法可能存在的问题,以及是否有比这更好的方法.
Hangfire实际上是处理后台任务的绝佳解决方案,我们已经在我们的项目中广泛使用它.
我们已经在单独的IIS服务器上设置了我们的MVC应用程序,这也是一个hangfire客户端,只需要挂起需要由hangfire服务器执行的作业.然后我们有两个hangfire服务器实例,它们是windows服务应用程序.因此,有效地在MVC应用服务器上没有负载来处理后台作业,因为它由单独的hangfire服务器处理.
hangfire的一个非常有用的功能是它的开箱即用仪表板,它允许您监视和控制后台作业处理的任何方面,包括统计信息,后台作业历史记录等.
在应用程序以及hangfire服务器中配置hangfire
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration.UseSqlServerStorage("<connection string or its name>");
app.UseHangfireDashboard();
app.UseHangfireServer();
}
Run Code Online (Sandbox Code Playgroud)
请注意,您使用相同的连接字符串.使用app.UseHangfireServer()仅当您希望使用的实例为迟发型服务器,所以你的情况,你想忽略从应用程序服务器配置此行只有在迟发型服务器使用.也可以app.UseHangfireDashboard()在实例中使用,它将为您的hangfire仪表板提供服务,这可能是您的MVC应用程序.
当时我们已经完成了它的使用Windows Service,但如果现在必须这样做,我想使用Azure工作者角色,甚至更好的Azure Web作业来托管我的hangfire服务器,并轻松管理自动缩放等事情.