【发布时间】:2012-07-05 07:20:06
【问题描述】:
好的,所以我大约 90% 确定这是不可能的,但我想我还是会问的。也许我错过了什么。
我正在尝试使用WCF over MSMQ with transacted batching。长话短说,我有一个队列,一次可能包含 200-300k 条消息,我需要将它们放入数据库中。它们最终会通过 Service Broker,但只有在我在 MSMQ 客户端中进行了一些预处理之后。
我们的想法是一次获取尽可能多的消息(并由我的基础架构支持),对它们进行预处理,然后将它们以表变量的形式发送到 SQL Server,最终进入 Service Broker 队列。
通过事务批处理,每个事务确实给我 N(100、1000 等)消息,但它们都按顺序进入我的 WCF 客户端。所以服务操作被调用N次,每条消息调用一次。在操作返回最后一条消息后,框架将提交或回滚事务。
我的想法是,将它们全部放在一个集合中并立即开始处理整个集合并将其发送到数据库会更有效。
做一些技巧(比如将它们存储在静态的东西中,一旦我点击 N 开始处理)不是很好,我试图避免。
我没有要发布的代码,因为我还没有写。我以前做过事务性批处理,我倾向于认为这是不可能的。
最终,我将把我的 WCF 客户端和 Receive() 彻底丢在 MessageQueueTransaction 中,当然是包装在分布式事务中(下至 SQL Server)。
但是,您是否知道任何受支持的方式,通过这些方式我可以获得一个列表,而不是摆弄 WCF 创建的默认分布式事务,并且避免在静态集合中保存任何东西?
谢谢!
【问题讨论】:
标签: .net wcf transactions msmq message-queue