我已將消息鎖定持續時間設置爲超過鎖定更新超時。但不知何故,它仍然會拋出同樣的例外。
鎖定時間的最大值是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。
我有唯一的問題'OnMessageOptions.AutoRenewTimeout'是沒有保證的操作和文檔沒有狀態,因此。這是客戶端操作,這意味着它可能會失敗,鎖定續約不會發生。 HTTPS://weblogs.asp。net/sfeldman/azure-service-bus-autorenewtimeout –
如果您想對鎖更新操作執行更多控制,您可以調用博客中提到的RenewLock方法。 – Amor
正確。只是這樣你就失去了OnMessage API的便利。無論哪種方式,我的評論只是提到,應該小心處理對AutoRenewTimeout的依賴。謝謝。 –