C# 如何使用NServiceBus避免READPAST锁警告

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 |清除

场景

我编写了一个压力测试,它向总线发送100个
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传输表上,而不是我自己的代码上。哎呀!我的错!但是链接是这样说的:-)我补充了一个澄清。