AzureStorage 上的 NServiceBus 调度消息花费的时间超过可见性超时

NServiceBus over AzureStorage Dispatching the message took longer than a visibility timeout

我在 AzureStorageQueues 传输上有 NServiceBus 运行。

有时,我的消息处理程序会在其日志中显示以下两个条目:

2018-08-27 12:27:23.0329 INFO 5 Handling Message...

2018-08-27 12:27:23.7359 WARN 5 Dispatching the message took longer than a visibility timeout. The message will reappear in the queue and will be obtained again. NServiceBus.AzureStorageQueues.LeaseTimeoutException: The pop receipt of the cloud queue message '2ebd6dd4-f4a1-40c6-a52e-499e22bc9f2f' is invalid as it exceeded the next visible time by '00:00:09.7359860'.

我知道可以配置可见性超时,但默认为 30 秒。正在处理的消息的处理时间超过了这 30 秒。

但是这两个日志条目的时间安排没有意义。处理程序在 23.0329 秒时启动...而警告在 23.7359 秒时弹出。那只是0.7秒。这是为什么?我希望 NServiceBus 的警告在 30 秒 InvisibilityTimeout 后弹出。

假设您使用的是默认设置,消息将在 batches. All messages in the batch have the same visibility timeout value of 30 seconds. There's also processing concurrency limit 中检索(计算为 max(2, number of logical processors),这可能会产生影响,导致批处理中的一些消息等待之前的消息完成处理。因此,您的消息可能作为批处理的一部分被检索但未立即处理,导致可见性超时过期。

通过调整配置来解决您的特定情况来调整配置应该摆脱那些重复处理消息的尝试。