1

好吧,所以我大约 90% 确定这是不可能的,但我想我还是会问。也许我错过了一些东西。

我正在尝试将WCF over MSMQ 与事务批处理一起使用。长话短说,我有一个队列,一次可能包含 200-300k 条消息,我需要将它们放入数据库中。它们最终会通过 Service Broker,但只有在我在 MSMQ 客户端中进行了一些预处理之后。

这个想法是一次获取尽可能多的消息(并由我的基础架构支持),对它们进行预处理,然后将它们以表变量的形式发送到 SQL Server,它们最终进入 Service Broker 队列。

通过事务处理批处理,我确实在每个事务中获得了 N(100、1000 等)消息,但它们都按顺序进入我的 WCF 客户端。所以服务操作被调用N次,每条消息调用一次。在操作返回最后一条消息后,框架将提交或回滚事务。

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

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

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

最终,我将把我的 WCF 客户端和Receive()它放在一个MessageQueueTransaction. 中,当然包裹在一个分布式事务中(下到 SQL Server)。

但是,您是否知道任何支持的方式,通过这些方式我可以获得一个列表,而不是摆弄 WCF 创建的默认分布式事务,也避免在静态集合中保存任何东西?

谢谢!

4

1 回答 1

1

我也不认为这是可能的。如果您直接使用 MSMQ,您会发现只能一条一条地获取消息。

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

于 2012-07-05T17:00:29.333 回答