是选择 MSMQ 还是不选择 MSMQ?(或者选择将 SQL 表作为队列)

12

我有一个分布式系统,其中将有1个SQL Server、1-n个处理服务器和1-n个数据供应商(网络上的硬件设备)。提供的数据在进入关系型DB结构之前需要进行处理,由处理服务器执行(作为Windows服务-.net代码解析数据、处理数据,并将其插入关系结构中)。

为了处理潜在的负载并不减慢数据供应商的速度,我想实现一个队列,但我不确定是否要添加MSMQ服务器的复杂性。有没有好的替代品,如使用DB(平面表)作为队列?.NET是否提供对DB队列的开箱即用支持,或者有其他可靠的排队选项?谢谢

编辑:(11月29日,晚上11:30)
听起来SQL Service Broker(SSB)可能行得通。 http://www.netframeworkdev.com/windows-communication-foundation/service-broker-vs-msmq-as-reliable-queueing-mechanism-63981.shtml

编辑:(11月30日,上午7:45)
发现另一个非常有用的链接:
http://social.msdn.microsoft.com/Forums/en-US/sqlservicebroker/thread/52687510-0852-44f3-bfcd-83610d1c1b9a
我还在研究将提供的数据的最大/最小大小。有没有人知道MSMQ和/或SSB承载的最大大小? MSMQ:4MB消息大小 SSB:2GB消息大小

编辑: (11月30日早上8:15)
这里有一个很好的 MSMQ 和 SSB 的比较:
好的消息队列策略?

2个回答

4

我会使用MSMQ,它不会增加太多复杂性,并且备份消息非常容易,因此即使在系统重启后也可以继续处理。您可以使用类似SSB的东西。


2
特别使用事务性 MSMQ。 - Steven

2

在这两个选项中,MSMQ实际上更为简单。如果您需要重新设置工作的优先级,或者只让处理代理选择特定类型的队列作业,则无法使用MSMQ。如果您不需要任何这些高级功能,那么在.NET中使用MSMQ非常容易。


1
您可以遍历 MSMQ 队列,仅处理某些消息:MessageQueue.CreateCursor,然后使用接受游标的 PeekReceive 重载。 - Richard
1
如果您想挑选某些类型的消息进行处理,最好为每种消息类型设置单独的队列。 - Trevor Pilley
@Richard,你真正做不到的是“重新设置优先级”。 - StingyJack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接