1

내 시스템에서 LockDuration = 5 분, AutoRenewTimeout = 20 분. 일부 메시지는 5 분 이상 소요됩니다 (언젠가 5:15, 때로는 6:00). 이러한 메시지에 대한 내가 예외가 : 5 분 후, 시스템이 처리를 시작할 때 나는 우리의 로그에 읽을Azure 서비스 버스 및 긴 처리 메시지

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

, 즉 시스템 (Process_A를 호출 할 수 있습니다) 메시지를 처리하기 시작, 그것은 아직 진행했다 같은 메시지를 한 번 더 보냅니다 (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