方案
我写了一个压力测试,它向总线发送了100 GenerateFile
个命令。
我知道这个过程有效,因为所有100个文件都是按预期创建的。
症状
在服务日志中,我发现了以下警告:
警告| NServiceBus.Transport.SQLServer.ExpiredMessagesPurger |清洗 来自表[dbo]的过期消息。[TransportTable]在清除0后失败 消息。
和
警告| NServiceBus.Transport.SQLServer.MessagePump |清洗 来自表[dbo]的过期消息。[TransportTable]失败,异常: System.Data.SqlClient.SqlException(0x80131904):您只能指定 READ COMMITTED或REPEATABLE READ隔离中的READPAST锁 水平。
澄清:这发生在NServiceBus传输表上,而不是我自己的功能表。
我想要什么
本着尽可能保持原木清洁的精神,我想避免上述警告。
因此
发生了什么事?
我发现了link,但根本原因对我来说仍然不明确。
和
如何避免这些警告?
答案 0 :(得分:4)
来自Particular Software的David Boike。
您是否指定了不同的事务隔离级别?你应该使用READ COMMITTED。我们实际上对only support read committed有一个未解决的问题。
READPAST提示非常重要,因为如果您有多个端点实例处理来自同一队列(即表)的消息,那么当它遇到锁定行时,您不希望等待该行变为可用,因为另一个实例正在处理它。相反,您只想跳过并查看下一行。
看起来这个警告来自删除因使用[TimeToBeReceived]属性而过期的邮件的过程。您不希望该进程挂起锁定的行。
答案 1 :(得分:0)
从提供的链接中,您似乎将数据插入到标记为要复制的表中。对于压力测试添加到非复制表,您将看不到这些错误。