有时锁不会自动更新。如果我做任何错误,请让我知道。 我正在使用Microsoft.Azure.ServiceBus库(v3.4.0),下面是我的代码段。
var client = new QueueClient(connectionString, queueName, ReceiveMode.PeekLock);
client.RegisterMessageHandler(async (message, token) =>
{
var logger = new AzureLogger();
logger.Debug("----------------------------------------------------------------------------");
logger.Debug("Message received.");
var body = Encoding.UTF8.GetString(message.Body);
logger.Debug($"Message : {body}");
try
{
for (int i = 1; i <= 30; i++)
{
logger.Debug(i.ToString());
logger.Debug("Lock time: " + message.SystemProperties.LockedUntilUtc.ToString("yyyy-MM-dd hh:mm:ss"));
logger.Debug("Lock token info: " + message.SystemProperties.IsLockTokenSet);
logger.Debug("Lock token: " + message.SystemProperties.LockToken);
Thread.Sleep(60000);
}
logger.Debug("Processing completed.");
await client.CompleteAsync(message.SystemProperties.LockToken);
}
catch (Exception ex)
{
logger.Error(ex.Message);
logger.Error(ex.StackTrace);
await client.DeadLetterAsync(message.SystemProperties.LockToken);
}
}, new MessageHandlerOptions(LogMessageHandlerException)
{
AutoComplete = false,
MaxAutoRenewDuration = TimeSpan.FromMinutes(120)
});
答案 0 :(得分:2)
不保证进行锁定续订。这是客户端操作/请求,当失败时,将无法扩展锁。依靠此功能时,请记住这一点。
答案 1 :(得分:0)
只能在服务总线消息上的锁定未到期之前更新服务总线消息上的锁定。如果消息上的锁已过期,即使在触发锁更新之前,也会引发异常,这将无法保证所有消息上的锁都将按@Sean Feldman所述进行更新。
如果对锁定的邮件执行的操作所花费的时间超过了邮件的锁定持续时间,则当您尝试完成或取消对邮件的锁定时,将会收到提供的锁定无效或过期异常
另一项建议是您的MaxAutoRenewDuration应该与消息的锁定时间保持同步。