The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue
I spent hours trying understand why I was getting a MessageLockLostException
. The reason for me was due to AutoComplete defaulting to true.
If you're going to call messsage.Complete()
(or CompleteAsync()
) then you should instantiate an OnMessageOptions
object, set AutoComplete
to false, and pass it into your OnMessage
call.
var options = new OnMessageOptions();
options.AutoComplete = false;
client.OnMessage(processCalculations, options);
I was having a similar issue. Messages were being handled successfully, but when they went to complete, the Service Bus didn't have a valid lock anymore. It turns out my TopicClient.PrefetchCount was too high.
It appears that the lock begins on all prefetched messages as soon as they are fetched. If your cumulative message processing time surpasses the lock timeout every other prefetched message will fail to complete. It will return to the service bus.