我在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的警告。
答案 0 :(得分:0)
假设您使用的是默认设置,则会在batches中检索邮件。批次中的所有消息具有相同的可见性超时值30秒。还有processing concurrency limit(计算为max(2, number of logical processors)
,这可能会产生影响,导致批处理中的某些消息等待先前的消息完成处理。因此,您的消息有可能作为批处理的一部分被检索但没有立即处理,导致可见性超时过期。
通过调整配置以解决您的特定情况来调整配置,应避免重复处理消息的尝试。