Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 后台任务按一定间隔轮询外部资源_Asp.net_.net_Architecture - Fatal编程技术网

Asp.net 后台任务按一定间隔轮询外部资源

Asp.net 后台任务按一定间隔轮询外部资源,asp.net,.net,architecture,Asp.net,.net,Architecture,要求:我需要创建一个后台工作人员/任务,该工作人员/任务将以一定的间隔(即10秒)从外部源消息队列获取数据,并更新数据库。需要24小时不间断运行。ASP.NET应用程序正在将数据放入消息队列 可能的解决办法: 带计时器的Windows服务 优点:减轻web服务器的负载 缺点:单独的部署开销,不平衡负载 使用此处描述的方法之一: 优点:不需要分离部署,可以实现负载平衡——如果一台服务器宕机,另一台服务器可以接收 缺点:web服务器上的开销然而,在我的情况下,最多有100个并发用户,并且看到web服

要求:我需要创建一个后台工作人员/任务,该工作人员/任务将以一定的间隔(即10秒)从外部源消息队列获取数据,并更新数据库。需要24小时不间断运行。ASP.NET应用程序正在将数据放入消息队列

可能的解决办法:

带计时器的Windows服务

优点:减轻web服务器的负载 缺点:单独的部署开销,不平衡负载 使用此处描述的方法之一:

优点:不需要分离部署,可以实现负载平衡——如果一台服务器宕机,另一台服务器可以接收 缺点:web服务器上的开销然而,在我的情况下,最多有100个并发用户,并且看到web服务器资源没有得到充分利用,我认为这不会是一个问题 问题:建议的解决方案是什么?为什么?
我正在寻找一个基于.net的解决方案。

除非有很好的理由,否则不应该选择第二个选项。将后台作业与web应用程序分离会带来许多好处:

可伸缩性—由您决定在何处部署服务。它可以与web应用程序共享同一个服务器,或者如果您看到负载增加,您可以轻松地将其移动到其他服务器。 健壮性—如果web应用程序或服务中存在严重缺陷,则不会导致其他组件停机。 维护-是的,有一点开销,因为你将不得不调整你的部署过程,但这就像从输出文件夹复制所有二进制文件一样简单,你只需要做一次。另一方面,如果您只需要修复服务中的一个小错误,则不必重新部署应用程序,从而使其停止运行一段时间。 等 虽然我建议你选择第一种方式,但我不喜欢定时器。有一个更简单、更健壮的解决方案。我将使用MSMQ绑定实现WCF服务,因为它为您提供了许多现成的功能:

您不必实现轮询逻辑。启动时,服务将连接到队列并等待新消息。 您可以轻松地使用事务处理队列消息。例如,如果数据库出现问题,而您无法写入,此时正在处理的消息将不会丢失。这将返回到稍后要处理的队列。 为了确保可伸缩性和可用性,您可以部署任意多个侦听同一队列的服务。WCF将确保同一队列消息不会被多个服务处理,也就是说,如果服务a正在处理一条消息,服务B将跳过该消息并获取下一条可用消息。 您还可以了解许多其他功能。 我建议阅读有关WCF+MSMQ服务示例的文章,看看实现一个服务并使用上面提到的功能有多简单。一旦您完成WCF服务,您就可以


希望有帮助

我会选择选项1。为什么?当你做出选择时,你会考虑很多因素。也许这并不重要,但如果你将web服务器推到其他组件上的负载越大,你的web服务器响应请求的速度就越快。@Mick谢谢。在你的答复之后,我详细阐述了我的问题。请看一看。为迟来的评论道歉。感谢Maksym的出色回复。关于您对MSMQ的引用,我必须改为读取来自IBM Websphere MQ的消息。没问题。建议的解决方案只是一个旁注,如何实现它取决于您,但是当涉及到在windows服务和web应用程序后台任务之间进行选择时,我非常确定您应该使用windows服务,除非您在问题中没有提到一些重要的内容