MessageLockLostExceptions我在處理消息時不斷收到。我將 Microsoft.Azure.ServiceBus 3.2.0 與 .NET Core 2.1 一起使用。我有一個LockDuration設置為 30 秒的隊列,其中已經包含許多要處理的消息。我從https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues#receive-messages獲取了非?;镜南⒔邮战坛檀a-from-the-queue,效果很好。LockDuration現在我想通過添加來模擬一個運行時間稍長的消息處理任務(但仍然在Task.Delay(10_000). 但隨后我MessageLockLostException每 4 條消息都會收到一條。即使我設置MaxAutoRenewDuration = TimeSpan.FromDays(30)and也會發生這種情況PrefetchCount = 0。這是消息處理方法,我稍作改動以打印出剩余的鎖定持續時間: private static async Task processMessagesAsync(Message message, CancellationToken token) { Console.Write($"Received message: {message.SystemProperties.SequenceNumber}. Remaining lock duration: {message.SystemProperties.LockedUntilUtc - DateTime.UtcNow}"); await Task.Delay(10000); await queueClient.CompleteAsync(message.SystemProperties.LockToken); Console.WriteLine(" - Complete!"); }完整代碼在這里:https ://pastebin.com/sFGBgE0s
2 回答

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
您需要Complete
在消息Lock Token
過期之前收到消息。Lock Token 過期后,您將MessageLockLostException
在整個操作過程中收到。
我可以看到您將每條消息的線程執行延遲 10 秒。但是這些消息似乎是在同一時間獲取的,這就是為什么每條消息的剩余鎖定持續時間不斷減少的原因。
對于第四條消息,剩余鎖定持續時間為00:00:00.1776760
。所以,在 之后177 milliseconds
,鎖就會過期。您正在下一行延遲線程10 seconds
。所以,鎖會過期,你會得到MessageLockLostException
. 為避免此異常,請刪除 Delay
- 2 回答
- 0 關注
- 188 瀏覽
添加回答
舉報
0/150
提交
取消