簡體   English   中英

Azure Service Bus Topic訂閱服務器鎖定已過期異常

[英]Azure Service Bus Topic Subscriber lock expired exception

我有一個Web作業,通過注冊OnMessage回調來使用Azure服務總線主題中的消息。 消息鎖定持續時間設置為30秒鎖定更新超時設置60秒 由於此類作業需要30秒鍾以上的時間來處理服務總線消息,因此發生了鎖過期異常。

現在,我已將消息鎖定持續時間設置為大於鎖定更新超時時間。 但是不知何故,它仍然拋出相同的異常。 我也重新開始了我的網絡工作,但是仍然沒有運氣。

我嘗試使用更高的設置運行來自不同主題的 相同webjob消耗消息,但效果很好。 這是預期的行為嗎?此設置更改會在多少時間后正常反映出來。

任何幫助都會很棒

我已將消息鎖定持續時間設置為大於鎖定更新超時時間。 但是不知何故,它仍然拋出相同的異常。

鎖定持續時間的最大值為5分鍾。 如果您需要不到5分鍾的時間來處理作業,則可以增加消息的鎖定時間,以滿足您的要求。

如果需要5分鍾以上的時間來處理作業 ,則需要設置OnMessageOptions的AutoRenewTimeout屬性。 如果鎖在到達AutoRenewTimeout之前已過期,它將更新鎖。 例如,如果將鎖定持續時間設置為1分鍾,並將AutoRenewTimeout設置為5分鍾。 如果您不釋放鎖,該消息將保持鎖定狀態最多5分鍾。

這是我用來測試鎖定持續時間和AutoRenewTimeout的示例代碼。 如果作業花費的時間超過鎖定持續時間和AutoRenewTimeout,它將在我們完成消息后拋出異常(這表示發生了超時)。 我還修改了門戶網站上的鎖定時間,並且在收到消息時將立即應用該配置。

SubscriptionClient Client = SubscriptionClient.CreateFromConnectionString(connectionString, "topic name", "subscription name");

// Configure the callback options.
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false;
options.AutoRenewTimeout = TimeSpan.FromSeconds(60);

Client.OnMessage((message) =>
{
    try
    {
        //process the message here, I used following code to simulation a long time spent job
        for (int i = 0; i < 30; i++)
        {
            Thread.Sleep(3000);
        }
        // Remove message from subscription.
        message.Complete();
    }
    catch (Exception ex)
    {
        // Indicates a problem, unlock message in subscription.
        message.Abandon();
    }
}, options);

對於您的問題,請檢查您的工作將花費多少時間,並選擇一種正確的方法來設置鎖定持續時間和AutoRenewTimeout。

設置應幾乎立即反映出來。 同樣,鎖更新可能應該超過鎖持續時間或被禁用。

鎖定更新功能是ASB客戶端功能,它不會覆蓋在實體上設置的鎖定持續時間。 如果您可以重現此問題並共享該repro,請向Microsoft提出支持問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM