C# 如何使用NServiceBus避免READPAST锁警告
场景 我编写了一个压力测试,它向总线发送100个C# 如何使用NServiceBus避免READPAST锁警告,c#,.net,sql-server,nservicebus,esb,C#,.net,Sql Server,Nservicebus,Esb,场景 我编写了一个压力测试,它向总线发送100个GenerateFile命令。 我知道这个过程已经成功,因为所有100个文件都是按预期创建的 症状 但在服务日志中,我发现以下警告: Warn | NServiceBus.Transport.SQLServer.ExpiredMessagesPurger |清除 来自表[dbo].[TransportTable]的过期消息在清除0后失败 信息 及 警告| NServiceBus.Transport.SQLServer.MessagePump |清除
GenerateFile
命令。
我知道这个过程已经成功,因为所有100个文件都是按预期创建的
症状
但在服务日志中,我发现以下警告:
Warn | NServiceBus.Transport.SQLServer.ExpiredMessagesPurger |清除
来自表[dbo].[TransportTable]的过期消息在清除0后失败
信息
及
警告| NServiceBus.Transport.SQLServer.MessagePump |清除
来自表[dbo].[TransportTable]的过期消息失败,出现异常:
System.Data.SqlClient.SqlException(0x80131904):只能指定
读取已提交或可重复读取隔离中的readpass锁
水平
澄清:这发生在NServiceBus传输表上,而不是我自己的功能表
我想要什么
本着保持原木尽可能干净的精神,我希望避免上述警告
So
发生了什么事
我发现了这个,但根本原因我还不清楚
和
如何避免这些警告
通过提供的链接,您似乎正在将数据插入标记为复制的表中。对于压力测试,将其添加到非复制表中,您将不会看到这些错误。David Boike 您是否指定了不同的事务隔离级别?您应该使用readcommitted。我们实际上有一个悬而未决的问题 readpass提示非常重要,因为如果您有多个端点实例处理来自同一队列(即表)的消息,那么当它遇到锁定行时,您不希望挂起等待该行可用,因为另一个实例正在处理该行。相反,您只需跳过并查看下一行
此警告似乎来自删除因使用[TimeToBeReceived]属性而过期的消息的过程。您也不希望该进程因锁定的行而挂起。它在NServiceBus传输表上,而不是我自己的代码上。哎呀!我的错!但是链接是这样说的:-)我补充了一个澄清。