通过使用 Azure 服务总线主题和订阅 - 我能够在两个系统之间传递消息。但是有时,我会收到此锁过期异常。如何避免呢?
异常- 消息处理程序遇到异常 Microsoft.Azure.ServiceBus.MessageLockLostException:提供的锁无效。锁已过期,或者消息已从队列中删除。
下面是代码:
static async Task MainAsync()
{
TokenProvider tokenProvider = TokenProvider.CreateManagedIdentityTokenProvider();
subscriptionClient = new SubscriptionClient(serviceBusNamespace, topicName, subscriptionName,
tokenProvider, receiveMode: ReceiveMode.PeekLock);
// Register subscription message handler and receive messages in a loop
RegisterOnMessageHandlerAndReceiveMessages();
Console.Read();
await subscriptionClient.CloseAsync();
}
static void RegisterOnMessageHandlerAndReceiveMessages()
{
var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
{
MaxConcurrentCalls = 1,
AutoComplete = false
};
// Register the function that processes messages.
subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
}
static async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
// Process the message recieved.
Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");
await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
}