Azure 服务总线异常 - 提供的锁无效。锁已过期,或者消息已从队列中删除
Azure Service bus exception - The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue
我已完成所有其他匹配问题,但找不到答案。不同的主要是;我的笔记本电脑上的代码 运行 与我的台式机上的代码相同,一个有效,另一个无效。我的代码在我的桌面上运行良好,然后我对我的代码进行了一些重大更改,我开始收到此异常。所以我尝试回滚,仍然收到异常。然后我尝试删除主题并重新创建它,我仍然收到相同的异常。然后我尝试删除我的开发目录中的所有内容并再次克隆 repo,并从它工作时加载旧代码,但我仍然得到异常。最后我在家里用我的笔记本电脑完成了它,我也没有例外。它适用于我的笔记本电脑,但不适用于我的台式机。有什么想法吗?
我尝试将代码分解到最低限度。接收看起来像这样:
class Program
{
static ITopicClient topicClient;
static ISubscriptionClient subscriptionClient;
static void Main(string[] args)
{
string connectionStringServiceBus = "Endpoint=sb://XXX-eventbus2.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxx";
string topicName = "wb-org-events";
string SubscriptionName = "ExamAdministration";
subscriptionClient = new SubscriptionClient(connectionStringServiceBus, topicName, SubscriptionName);
Console.WriteLine("======================================================");
Console.WriteLine("Press any key to exit after receiving all the messages.");
Console.WriteLine("======================================================");
//topicClient = new TopicClient(connectionStringServiceBus, topicName);
RegisterMessageHandlerAndReceiveMessages();
Console.ReadKey();
subscriptionClient.CloseAsync();
// topicClient.CloseAsync().Wait();
}
static void RegisterMessageHandlerAndReceiveMessages()
{
// Configure the MessageHandler Options in terms of exception handling, number of concurrent messages to deliver etc.
var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
{
MaxConcurrentCalls = 1,
AutoComplete = false
};
// Register the function that will process messages
subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
}
static async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
// Process the message
Console.WriteLine($"Received message: Sequence Number:{message.SystemProperties.SequenceNumber} \t Body:{Encoding.UTF8.GetString(message.Body)}");
await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
}
// Use this Handler to look at the exceptions received on the MessagePump
static Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
{
Console.WriteLine($"Exception:: {exceptionReceivedEventArgs.Exception}.");
return Task.CompletedTask;
}
}
此外,今天我开始输出 UTCNow 和 message.SystemProperties.LockeduntilUtc 时间。 LockedUntilUtc 时间过去 17 秒对我来说毫无意义。
我将锁定持续时间从默认值更改为最大值,异常消失了。所以更新不会发生,因此也不例外。这似乎不是一个好的解决方法。
原来我电脑上的时钟大约慢了 40 秒。一旦我同步了它,异常就消失了。
我已完成所有其他匹配问题,但找不到答案。不同的主要是;我的笔记本电脑上的代码 运行 与我的台式机上的代码相同,一个有效,另一个无效。我的代码在我的桌面上运行良好,然后我对我的代码进行了一些重大更改,我开始收到此异常。所以我尝试回滚,仍然收到异常。然后我尝试删除主题并重新创建它,我仍然收到相同的异常。然后我尝试删除我的开发目录中的所有内容并再次克隆 repo,并从它工作时加载旧代码,但我仍然得到异常。最后我在家里用我的笔记本电脑完成了它,我也没有例外。它适用于我的笔记本电脑,但不适用于我的台式机。有什么想法吗?
我尝试将代码分解到最低限度。接收看起来像这样:
class Program
{
static ITopicClient topicClient;
static ISubscriptionClient subscriptionClient;
static void Main(string[] args)
{
string connectionStringServiceBus = "Endpoint=sb://XXX-eventbus2.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxx";
string topicName = "wb-org-events";
string SubscriptionName = "ExamAdministration";
subscriptionClient = new SubscriptionClient(connectionStringServiceBus, topicName, SubscriptionName);
Console.WriteLine("======================================================");
Console.WriteLine("Press any key to exit after receiving all the messages.");
Console.WriteLine("======================================================");
//topicClient = new TopicClient(connectionStringServiceBus, topicName);
RegisterMessageHandlerAndReceiveMessages();
Console.ReadKey();
subscriptionClient.CloseAsync();
// topicClient.CloseAsync().Wait();
}
static void RegisterMessageHandlerAndReceiveMessages()
{
// Configure the MessageHandler Options in terms of exception handling, number of concurrent messages to deliver etc.
var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
{
MaxConcurrentCalls = 1,
AutoComplete = false
};
// Register the function that will process messages
subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
}
static async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
// Process the message
Console.WriteLine($"Received message: Sequence Number:{message.SystemProperties.SequenceNumber} \t Body:{Encoding.UTF8.GetString(message.Body)}");
await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
}
// Use this Handler to look at the exceptions received on the MessagePump
static Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
{
Console.WriteLine($"Exception:: {exceptionReceivedEventArgs.Exception}.");
return Task.CompletedTask;
}
}
此外,今天我开始输出 UTCNow 和 message.SystemProperties.LockeduntilUtc 时间。 LockedUntilUtc 时间过去 17 秒对我来说毫无意义。 我将锁定持续时间从默认值更改为最大值,异常消失了。所以更新不会发生,因此也不例外。这似乎不是一个好的解决方法。
原来我电脑上的时钟大约慢了 40 秒。一旦我同步了它,异常就消失了。