通过AzureStorage的NServiceBus发送消息花费的时间超过了可见性超时

时间:2018-08-28 12:08:54

标签: nservicebus azure-storage-queues

我在AzureStorageQueues传输上运行了NServiceBus。

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

  

2018-08-27 12:27:23.0329 INFO 5处理消息...

     

2018-08-27 12:27:23.7359警告5发送消息花费的时间更长   而不是可见性超时。该消息将重新出现在队列中,并且   将再次获得。   NServiceBus.AzureStorageQueues.LeaseTimeoutException:弹出收据   的云队列消息'2ebd6dd4-f4a1-40c6-a52e-499e22bc9f2f'是   无效,因为它超出了下一个可见时间“ 00:00:09.7359860”。

我了解可以配置“可见性超时”,但默认情况下为30秒。并且正在处理的消息要花费超过30秒的时间。

但是这两个日志条目的计时没有意义。处理程序在23.0329秒处启动,而警告在23.7359秒处弹出。仅需0.7秒。这是为什么?我希望30秒钟InvisibilityTimeout之后会弹出NServiceBus的警告。

1 个答案:

答案 0 :(得分:0)

假设您使用的是默认设置,则会在batches中检索邮件。批次中的所有消息具有相同的可见性超时值30秒。还有processing concurrency limit(计算为max(2, number of logical processors),这可能会产生影响,导致批处理中的某些消息等待先前的消息完成处理。因此,您的消息有可能作为批处理的一部分被检索但没有立即处理,导致可见性超时过期。

通过调整配置以解决您的特定情况来调整配置,应避免重复处理消息的尝试。