运行NServicebus服务时出现死锁会导致连接损坏

时间:2013-03-12 08:19:54

标签: nhibernate deadlock nservicebus

我们正在为Web应用程序运行NServiceBus来处理用户执行“批量操作”操作的情况。像火一样影响1000个实体的命令..

它运行良好,但在中等负载期间我们会遇到一些死锁,这不是问题,只是重试消息..对吗? :)

当下一条消息到达并尝试打开连接时,会出现此问题。然后连接“腐败”。

我们收到以下错误: System.Data.SqlClient.SqlException(0x80131904):不允许启动新请求,因为它应该带有有效的事务描述符

我在网上搜索过,我认为我们的问题是报告NH "bug"

解决方法应该是禁用连接池。但我不喜欢这样,因为表演会降低......

我们正在运行NServiceBus 2.6,NHibernate 3.3。

有没有人有这方面的经验?可以升级NServiceBus吗?

2 个答案:

答案 0 :(得分:1)

我在过去看过这个,如果你的设计需要保证,请尝试将事务分成两部分,如果你将消息事务一直流向数据库操作,任何故障都会产生级联效应并且会影响(理想情况下,它不应该)任何后续消息。

答案 1 :(得分:0)

您可以发布一个事件来表示命令已经完成,然后让几个订阅者根据此事件更新效果实体,而不是更新命令中的1000个实体。听起来,更新1000个实体的命令应该拆分成许多较小的命令。看看传奇,了解如何处理长期运行的业务流程。例如,您可能有类似的事情,流程已启动,步骤1已完成,步骤2已完成,流程已完成等...