繁体   English   中英

如何在运行中为非常长的处理消息更新锁定 - Azure.Messaging.ServiceBus;

[英]how to renew lock for a very long processing message on the fly - Azure.Messaging.ServiceBus;

是否可以为 Azure.Messaging.ServiceBus 库中正在处理的消息更新锁定,如果是,如何

根据您的使用情况,您需要延长锁。 使用您提到的服务总线 SDK 提供的处理器,可以通过以下方式完成:

await using var client = new ServiceBusClient(connectionString);

// create the options to use for configuring the processor
var options = new ServiceBusProcessorOptions
{
    MaxAutoLockRenewalDuration = TimeSpan.FromMinutes(45); // Allow message processing for up-to 45 minutes
    AutoCompleteMessages = false,

    // Disable multi-threading for easy debugging
    MaxConcurrentCalls = 1
};

await using ServiceBusProcessor processor = client.CreateProcessor(queueName, options);

processor.ProcessMessageAsync += MessageHandler;
processor.ProcessErrorAsync += ErrorHandler;

async Task MessageHandler(ProcessMessageEventArgs args)
{
    string body = args.Message.Body.ToString();
    Console.WriteLine(body);

    await args.CompleteMessageAsync(args.Message);
}

Task ErrorHandler(ProcessErrorEventArgs args)
{
    Console.WriteLine(args.ErrorSource);

    Console.WriteLine(args.FullyQualifiedNamespace);
    Console.WriteLine(args.EntityPath);

    Console.WriteLine(args.Exception.ToString());

    return Task.CompletedTask;
}

processor.StartProcessingAsync();
Console.ReadKey();

它们的关键是需要设置为最大可能时间的MaxAutoLockRenewalDuration属性。

如果您使用的是ServiceBusReceiver ,它会提供RenewMessageLockAsync方法来实现目标。

消息锁续订适用于端点主动处理的消息,不适用于已预取的消息。

消息锁更新时间应长于LockDuration时间。

Azure 服务总线传输将在LockDuration 期限即将到期时向代理发送锁定更新请求,保持消息锁定并且对其他消费者不可见

消息处理的总时间小于 Azure 服务总线传输设置的自动更新时间时,锁更新将自动发生

锁更新时间默认设置为 5 分钟。 如果更新自动锁定,已处理消息的DeliveryCount不会增加。

为当前正在处理的消息更新消息锁。 当传输完成预取消息时,如果未在LockDuration时间内处理它们,它们将失去锁定。 这将由日志中的LockLostException发出信号。 通过将PrefetchCount设置为零,可以停用预取以避免锁定更新异常。

配置消息以锁定更新

var ServiceBusTransport= endpointConfiguration.UseTransport<AzureServiceBusTransport>(); 
var ServiceBusReceivers = ServiceBusTransport.MessageReceivers(); 
ServiceBusReceivers .AutoRenewTimeout(maximumProcessingTime);

请参阅此处了解更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM