亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Azure 服務總線不斷拋出 MessageLockLostExceptions

Azure 服務總線不斷拋出 MessageLockLostExceptions

C#
函數式編程 2022-06-12 10:51:31
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 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

您的復制品中缺少的一件事是隊列描述。重要的是要注意這些細節,因為您遇到的問題與客戶端無關,很可能與代理或底層 AMQP 庫有關。

對于非分區隊列,此設置工作正常。它不適用于分區隊列(標準層)。新老客戶都可以觀察到。我提出了一個與代理相關的問題,供 Azure 服務總線團隊進行調查。


查看完整回答
反對 回復 2022-06-12
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

您需要Complete在消息Lock Token過期之前收到消息。Lock Token 過期后,您將MessageLockLostException在整個操作過程中收到。

我可以看到您將每條消息的線程執行延遲 10 秒。但是這些消息似乎是在同一時間獲取的,這就是為什么每條消息的剩余鎖定持續時間不斷減少的原因。

對于第四條消息,剩余鎖定持續時間為00:00:00.1776760。所以,在 之后177 milliseconds,鎖就會過期。您正在下一行延遲線程10 seconds。所以,鎖會過期,你會得到MessageLockLostException. 為避免此異常,請刪除 Delay


查看完整回答
反對 回復 2022-06-12
  • 2 回答
  • 0 關注
  • 188 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號