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分を超えるメッセージは処理できません。または構成が間違っているかもしれませんか?

答えて

1

解決策は、メッセージを処理する時間が最大ロック時間を超えている場合にメッセージのロックを更新することです。 Azure Service Bus .Net SDKを使用している場合、呼び出すメソッドはRenewMessageLockで、メッセージを取得したときに受け取ったロックIDを渡します。

また、このブログの記事は、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/en-us/dotnet/api/microsoft.servicebus.messaging.onmessageoptions?view=azureservicebus-4.0.0)クラスのフィールドです。 ここにそれに関する話題があります:http://stackoverflow.com/questions/36561227/azure-servicebus-autorenewtimeout – MichalO

関連する問題