5

我们正在为 Web 应用程序运行 NServiceBus,以处理用户执行“类似批处理”操作的情况。就像发射一个影响 1000 个实体的命令..

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

当下一条消息到达并尝试打开连接时,就会出现问题。然后连接是“损坏的”。

我们收到以下错误: System.Data.SqlClient.SqlException (0x80131904): New request is not allowed to start 因为它应该带有有效的事务描述符

我在网上搜索过,我认为我们的问题是报告的NH“错误”

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

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

有人对这个有经验么?升级 NServiceBus 有帮助吗?

4

2 回答 2

1

我过去见过这种情况,如果您的设计允许,请尝试将事务分成两部分,如果您将消息事务一直流向数据库操作,任何失败都会产生级联效应并且会影响(理想情况下应该't) 任何后续消息。

于 2013-03-19T00:49:16.140 回答
0

除了更新命令中的 1000 个实体之外,您还可以发布一个事件来表示命令已完成,然后让多个订阅者对该事件进行操作以更新效果实体。在我看来,更新 1000 个实体的命令应该拆分为多个较小的命令。看看 sagas,看看如何处理长期运行的业务流程。例如,您可能有类似流程已启动、步骤 1 已完成、步骤 2 已完成、流程已完成等...

于 2013-03-21T09:00:33.043 回答