场景
我编写了一个压力测试,向总线发送 100 个 GenerateFile
命令。
我知道该过程已成功,因为所有 100 个文件均已按预期创建。
症状
但是在服务日志中我发现了这些警告:
Warn | NServiceBus.Transport.SQLServer.ExpiredMessagesPurger | Purging expired messages from table [dbo].[TransportTable] failed after purging 0 messages.
还有
Warn | NServiceBus.Transport.SQLServer.MessagePump | Purging expired messages from table [dbo].[TransportTable] failed with exception: System.Data.SqlClient.SqlException (0x80131904): You can only specify the READPAST lock in the READ COMMITTED or REPEATABLE READ isolation levels.
澄清:这发生在 NServiceBus 传输表上,而不是我自己的功能表上。
我想要什么
本着尽可能保持日志干净的精神,我想避免出现上述警告。
所以
What is happening?
我找到了这个link ,但根本原因我仍然不清楚。
和
How can I avoid these warnings?
最佳答案
来自 Particular Software 的大卫·博伊克 (David Boike)在这里。
您是否指定了不同的事务隔离级别?您应该使用 READ COMMITTED。实际上,我们有一个 Unresolved 问题 only support read committed .
READPAST 提示至关重要,因为如果您有多个端点实例处理来自同一队列(即表)的消息,那么当它遇到锁定行时,您不希望挂起等待该行变得可用,因为另一个实例正在处理它。相反,您只想跳过并查看下一行。
此警告似乎来自删除因使用 [TimeToBeReceived] 属性而过期的消息的过程。您也不希望该进程因锁定的行而挂起。
关于c# - 如何使用 NServiceBus 避免 READPAST 锁定警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42995463/