c# - 如何使用 NServiceBus 避免 READPAST 锁定警告

标签 c# .net sql-server nservicebus esb

场景

我编写了一个压力测试,向总线发送 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/

相关文章:

c# - 如何为 DataGrid 设置透明背景?

c# - 什么是 .NET 程序集?

sql-server - SQL - 如何合并行

c# - 错误。处理您的请求时发生错误

c# - 如何编写基于网络浏览器的多人游戏?

c# - IAsyncEnumerable<T> 和迭代器生成的 IEnumerable<Task<T>> 之间有什么区别?

c# - 手动编码解析器

c# - 如何在不实际下载文件的情况下判断 FTP 上的文件是否与本地文件相同?

.net - 反序列化时缺少 JSON.Net 构造函数参数

sql - SQL 2005 索引 View 的缓慢