我已将消息锁定持续时间设置为超过锁定更新超时。但不知何故,它仍然抛出同样的异常。
锁定持续时间的最大值为 5 分钟。如果您需要少于 5 分钟来处理该作业,您可以增加消息的锁定持续时间以满足您的要求。
如果您需要超过 5 分钟来处理您的工作,您需要设置 OnMessageOptions 的 AutoRenewTimeout 属性。如果锁在达到 AutoRenewTimeout 之前过期,它将更新锁。例如,如果您将锁定持续时间设置为 1 分钟,并将 AutoRenewTimeout 设置为 5 分钟。如果您不释放锁定,消息将保持锁定状态长达 5 分钟。
这是我用来测试锁定持续时间和 AutoRenewTimeout 的示例代码。如果作业花费的时间超过锁定持续时间和 AutoRenewTimeout,当我们完成消息时它会抛出异常(这意味着发生了超时)。我还修改了门户上的锁定持续时间,当我收到消息时将立即应用配置。
SubscriptionClient Client = SubscriptionClient.CreateFromConnectionString(connectionString, "topic name", "subscription name");
// Configure the callback options.
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false;
options.AutoRenewTimeout = TimeSpan.FromSeconds(60);
Client.OnMessage((message) =>
{
try
{
//process the message here, I used following code to simulation a long time spent job
for (int i = 0; i < 30; i++)
{
Thread.Sleep(3000);
}
// Remove message from subscription.
message.Complete();
}
catch (Exception ex)
{
// Indicates a problem, unlock message in subscription.
message.Abandon();
}
}, options);
对于您的问题,请检查您的工作将花费多少时间,并选择正确的方式来设置锁定持续时间和 AutoRenewTimeout。