.Net 框架来管理单独机器上的后台 运行 进程
.Net framework to manage background running processess on seperate machines
我有一个 asp.mvc 应用程序驻留在 server.From 这个应用程序上,我想启动一个有点长的进程 - 运行ning 操作并且将是资源密集型操作
所以我想做的是我想要一些像 3 这样的用户代理,它将存在于 3 台机器上,并且这个用户代理将只使用它们各自机器的资源。
就像在 Hadoop 中一样,我们有主节点和集群,其中任务 运行 在单个集群上,并且有 1 个主节点跟踪所有这些集群。
在 Azure 中,我们有虚拟机,其上有任务运行,如果需要,Azure 可以通过启动新实例来自动水平扩展以加速任务。
所以我想创建这样的基础设施,我可以从 mvc 应用程序将我的任务提交给 3 个用户代理,我的应用程序将跟踪这些代理,比如哪个代理空闲,哪个被占用,哪个不工作像这样。
我想从每个用户代理接收进度并显示在我的 MVC 应用程序上。
.net 中是否有我可以管理此背景的任何框架运行宁操作(跟踪、启动、停止等..)或者应该采用什么方法?
更新:我不想为这么长的 运行ning 操作加载服务器,而且我想跟踪这么长的 运行宁过程太像他们在做什么,哪里有错误等
以下是我正在考虑的方法,但我不知道哪种方法更有意义:
1) 在本地 2-3 台计算机上以代理形式安装 Windows 服务,以利用 resp 资源并与该代理建立 tcp/ip 连接,除非并且直到 运行宁过程完成。
2) 在 IIS 线程之外使用 hangfire 运行 这个漫长的 运行ning 进程,但我想这会给服务器带来负载。
我想知道上述方法可能存在的问题,是否有比这更好的方法。
将消息从您的 MVC 应用程序推送到 MSMQ,并让您的 windows 服务侦听(或循环)进入队列的新消息。
在您的 MVC 应用程序中,为每条排队的消息创建一个 ID,因此当您在工作中取得进展时,从您的 windows 服务中调用 restful API 返回到 mvc 应用程序?
看看 Hangfire,它可以管理后台任务并跨 VM 工作而不会发生冲突。我们已经用它替换了 windows 服务,它运行良好。
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();
}
请注意,您使用了相同的连接字符串。仅当您想将该实例用作 hangfire 服务器时才使用 app.UseHangfireServer()
,因此在您的情况下,您希望从应用程序服务器配置中省略此行并仅在 hangfire 服务器中使用。
还可以在实例中使用 app.UseHangfireDashboard()
来为您的 hangfire 仪表板提供服务,这可能是您的 MVC 应用程序。
当时我们已经使用 Windows Service
完成了它,但如果现在必须这样做,我想使用 Azure worker role or even better now Azure Web Jobs 来托管我的 hangfire 服务器,并管理诸如自动缩放之类的事情很容易。
有关详细信息,请参阅 hangfire overview and documentation。
EasyNetQ 是一个简单易用、自以为是的 .NET API RabbitMQ。
EasyNetQ 是在 RabbitMQ.Client 库之上提供服务的组件集合。它们执行序列化、错误处理、线程编组、连接管理等操作。
使用 EasyNetQ 发布
var message = new MyMessage { Text = "Hello Rabbit" };
bus.Publish(message);
要订阅消息,我们需要为 EasyNetQ 提供一个在消息到达时执行的操作。我们通过传递订阅委托来做到这一点:
bus.Subscribe<MyMessage>("my_subscription_id", msg => Console.WriteLine(msg.Text));
现在每次发布 MyMessage 的实例时,EasyNetQ 都会调用我们的委托并将消息的文本 属性 打印到控制台。
The performance of EasyNetQ is directly related to the performance of the RabbitMQ broker. This can vary with network and server performance. In tests on a developer machine with a local instance of RabbitMQ, sustained over-night performance of around 5000 2K messages per second was achieved. Memory use for all the EasyNetQ endpoints was stable for the overnight run
我有一个 asp.mvc 应用程序驻留在 server.From 这个应用程序上,我想启动一个有点长的进程 - 运行ning 操作并且将是资源密集型操作
所以我想做的是我想要一些像 3 这样的用户代理,它将存在于 3 台机器上,并且这个用户代理将只使用它们各自机器的资源。
就像在 Hadoop 中一样,我们有主节点和集群,其中任务 运行 在单个集群上,并且有 1 个主节点跟踪所有这些集群。
在 Azure 中,我们有虚拟机,其上有任务运行,如果需要,Azure 可以通过启动新实例来自动水平扩展以加速任务。
所以我想创建这样的基础设施,我可以从 mvc 应用程序将我的任务提交给 3 个用户代理,我的应用程序将跟踪这些代理,比如哪个代理空闲,哪个被占用,哪个不工作像这样。
我想从每个用户代理接收进度并显示在我的 MVC 应用程序上。
.net 中是否有我可以管理此背景的任何框架运行宁操作(跟踪、启动、停止等..)或者应该采用什么方法?
更新:我不想为这么长的 运行ning 操作加载服务器,而且我想跟踪这么长的 运行宁过程太像他们在做什么,哪里有错误等
以下是我正在考虑的方法,但我不知道哪种方法更有意义:
1) 在本地 2-3 台计算机上以代理形式安装 Windows 服务,以利用 resp 资源并与该代理建立 tcp/ip 连接,除非并且直到 运行宁过程完成。
2) 在 IIS 线程之外使用 hangfire 运行 这个漫长的 运行ning 进程,但我想这会给服务器带来负载。
我想知道上述方法可能存在的问题,是否有比这更好的方法。
将消息从您的 MVC 应用程序推送到 MSMQ,并让您的 windows 服务侦听(或循环)进入队列的新消息。
在您的 MVC 应用程序中,为每条排队的消息创建一个 ID,因此当您在工作中取得进展时,从您的 windows 服务中调用 restful API 返回到 mvc 应用程序?
看看 Hangfire,它可以管理后台任务并跨 VM 工作而不会发生冲突。我们已经用它替换了 windows 服务,它运行良好。
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();
}
请注意,您使用了相同的连接字符串。仅当您想将该实例用作 hangfire 服务器时才使用 app.UseHangfireServer()
,因此在您的情况下,您希望从应用程序服务器配置中省略此行并仅在 hangfire 服务器中使用。
还可以在实例中使用 app.UseHangfireDashboard()
来为您的 hangfire 仪表板提供服务,这可能是您的 MVC 应用程序。
当时我们已经使用 Windows Service
完成了它,但如果现在必须这样做,我想使用 Azure worker role or even better now Azure Web Jobs 来托管我的 hangfire 服务器,并管理诸如自动缩放之类的事情很容易。
有关详细信息,请参阅 hangfire overview and documentation。
EasyNetQ 是一个简单易用、自以为是的 .NET API RabbitMQ。
EasyNetQ 是在 RabbitMQ.Client 库之上提供服务的组件集合。它们执行序列化、错误处理、线程编组、连接管理等操作。
使用 EasyNetQ 发布
var message = new MyMessage { Text = "Hello Rabbit" };
bus.Publish(message);
要订阅消息,我们需要为 EasyNetQ 提供一个在消息到达时执行的操作。我们通过传递订阅委托来做到这一点:
bus.Subscribe<MyMessage>("my_subscription_id", msg => Console.WriteLine(msg.Text));
现在每次发布 MyMessage 的实例时,EasyNetQ 都会调用我们的委托并将消息的文本 属性 打印到控制台。
The performance of EasyNetQ is directly related to the performance of the RabbitMQ broker. This can vary with network and server performance. In tests on a developer machine with a local instance of RabbitMQ, sustained over-night performance of around 5000 2K messages per second was achieved. Memory use for all the EasyNetQ endpoints was stable for the overnight run