WCF / MSMQ和事务处理批处理 - 一次性批量获取消息,而不是按顺序

时间:2012-07-04 20:13:47

标签: .net wcf transactions msmq message-queue

好吧,所以我大约90%肯定这是不可能的,但我想我还是会问。也许我错过了什么。

我正在尝试使用WCF over MSMQ with transacted batching。长话短说,我有一个队列,一次可能有200-300k消息,我需要将它们放在数据库中。他们最终通过Service Broker,但只有在我在MSMQ客户端进行一些预处理后才会这样做。

我们的想法是尽可能多地获取消息(并由我的基础架构支持),预先处理它们,然后将它们发送到SQL Server中,最终进入Service Broker队列。

使用事务处理批处理我确实每个事务都有N(100,1000等)消息,但它们都按顺序进入我的WCF客户端。因此,服务操作被调用N次,每个消息一次。操作返回最后一条消息后,框架将提交或回滚事务。

我的想法是,将它们全部放入集合并立即开始处理整个集合并将其发送到数据库会更高效。

做某种技巧(比如将它们存储在静态的东西中,一旦我点击N开始处理)就不是很好了,我试图避免。

我没有任何要发布的代码,因为我还没写过。我以前做过交易批处理,我倾向于认为这是不可能的。

最终我会在Receive()内删除我的WCF客户端和MessageQueueTransaction地狱,当然是在分布式事务中(包括SQL Server)。

但是,您知道我可以通过哪种方式获取列表而不是摆弄WCF创建的默认分布式事务,也避免在静态集合中保留任何内容吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为这也不可能。如果你直接使用MSMQ,你会发现你只能逐个收到消息。

已经说过WCF(超过MSMQ)和MSMQ之间存在显着差异。第一个是基于推的,而后者是基于拉的。如果您可以切换到直接MSMQ,那么很容易从中提取N个消息并批量处理/保存。针对MSMQ的编程比WCF容易得多。