1

在我的系統LockDuration = 5分鐘,AutoRenewTimeout = 20分鐘。一些消息的處理時間超過5分鐘(有時候5:15,有時超過6:00)。 對於這些消息我有一個例外:Azure服務總線和長處理消息

"The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue." 

我在我們的日誌讀取,該系統開始處理消息(可以稱之爲Process_A),這是仍在進行中時,5分鐘後,系統開始處理同樣的消息多一次(讓我們稱之爲Process_B)。 Process_A完成並調用Complete()。然後Process_B完成了工作並調用了Complete()。它會導致異常,因爲此消息已被壓縮。

我在文檔中發現LockDuration的最大值是5分鐘。爲什麼? 超過5分鐘的信息無法處理?或者mayby的配置是錯誤的?

回答

1

解決方法是在消息處理時間超過最大鎖定持續時間的情況下更新消息的鎖定。如果您使用的是Azure Service Bus .Net SDK,則您想要調用的方法是RenewMessageLock,並傳入您在獲取消息時收到的鎖定標識。

您可能還會覺得這篇博文很有幫助:http://vunvulearadu.blogspot.in/2015/09/azure-service-bus-how-to-extend-lock-of.html

+0

我應該在代碼中這樣做嗎?是不是AutoRenewTimeout? – MichalO

+0

你能分享一個'AutoRenewTimeout'的鏈接嗎?我無法找到這個屬性。 –

+0

這是[OnMessageOptions](https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.servicebus.messaging.onmessageoptions?view=azureservicebus-4.0.0)類中的字段。 這是一個關於它的主題:http://stackoverflow.com/questions/36561227/azure-servicebus-autorenewtimeout – MichalO