我研究了为Web应用程序排队的概念(即将某些类型的作业放入队列中以供单独的工作人员完成,而不是在Web请求周期中完成).
我想知道是否有任何好的解决方案可以在ASP.NET MVC环境中使用.
有没有人有任何(好的或坏的)经历?
谢谢!
更新:
只是为了澄清,我不是在谈论排队传入的请求.我会试着说明我的意思……
1)标准情况:
>来自浏览器的请求
>服务器处理开始
>长期工作开始
>长期工作完成
>服务器处理完成
>响应返回浏览器
2)我正在研究的内容:
>从浏览器中获取
>服务器处理开始
>长期工作排队
>服务器处理完成
>响应返回浏览器
在另一个过程中(可能在发送响应之后):
>从队列中取出长期工作
>长期工作开始
>长期工作完成
在第一个实例中,用户已经等待很长时间来进行服务器重新计算,在第二个实例中它很快.
当然,某些类型的工作适合于此,有些则不适合.
UPDATE2:
客户端不必立即使用长作业的结果进行更新.只要用户碰巧刷新页面(当然,在作业完成之后),这些更改就会在应用程序中显示出来.
想想堆栈溢出中发生的一些事情 – 它们不会立即在应用程序的每个部分更新,但这种情况很快发生 – 我怀疑其中一些工作正在排队.
解决方法
将作业数据发布到
MSMQ queue中,并让Windows服务处理队列中的项目.或者,让Web请求生成一个处理队列中项目的进程.