[英]Get active message count with the new 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.