我有一个ASP.NET web应用程序,它向sql server发送长进程请求。我们想要改变这一点,而是将web请求发送到队列中,Windows服务会从队列中弹出消息,然后逐个发送到sql server。目前,我们需要决定用于队列的机制是什么。
正在考虑的实现队列的几个选项如下:
1)模拟队列的数据库表,或
2) Windows消息队列
我想找出使用windows和数据库表.的利弊。
更新
其他解决方案
服务经纪人:由Remus Rusanu推荐
它需要深入的学习曲线。帕夫蒙尼仍然不知道。
谢谢
发布于 2011-06-28 22:47:46
不需要混合MSMQ或WCF,只需使用Server内置队列功能即可。有关示例,请参见异步过程执行。这样,您就不需要一个新的进程来解除MSMQ请求的队列并处理DB长调用,您不必处理单独的消息存储和DB strore,您对消息和数据都有一个连贯的回还原,在高可用性情况下,您的消息与数据一起失败。更别提SQL Server队列的规模比MSMQ大得多(无论在吞吐量还是容量方面)。使用MSMQ将要求您为所有这些问题提供一个解决方案:一致性备份/恢复、在发生HA事件时通过MSMQ与数据库一起失败、提供读取MSMQ消息的进程和执行DB工作。
发布于 2011-06-28 19:08:13
数据库表将需要轮询来检查数据库更改,除非您可以使用触发器设计一些聪明的东西。MSMQ不会,所以它在效率上赢了。
即使消费数据库关闭,队列也可以保证传递。数据库表不能。
我敢打赌数据库表对你来说更熟悉。MSMQ是一种新技术,它总是带有一定的风险。
设置队列意味着应用程序中另一个移动部分;这会增加复杂性。
我认为还有第三种方法:带有生产者/使用者的线程队列数据结构。查看一下.NET类,看看是否存在类似的东西。也许.NET中的多线程功能可以提供您所需的异步处理,而不像MSMQ那么复杂。
发布于 2011-06-28 19:11:46
通过WCF使用MSMQ实现。它的简单-难以置信的容易设置和处理接收代码,以及下降。
因此,从Asp.Net调用是微不足道的。
见:(及其他) http://blogs.msdn.com/b/skaufman/archive/2008/02/20/processing-multiple-queues-in-fifo-order-with-wcf.aspx
https://stackoverflow.com/questions/6511738
复制相似问题