.net Azure服务总线:如何更新锁?

.net Azure服务总线:如何更新锁?,.net,azure,asp.net-core,azureservicebus,azure-servicebus-queues,.net,Azure,Asp.net Core,Azureservicebus,Azure Servicebus Queues,如何更新接收队列消息处理程序上的锁? 在事件处理程序上,测试消息没有“续订锁”属性 Message testMessage; 您上面发布的RenewLock api链接来自旧的不推荐使用的WindowsAzure.ServiceBus nuget包,其中RenewLock方法是BrokeredMessage的一部分。 当前包Microsoft.Azure.ServiceBus(您正确使用的)将RenewLockAsync方法作为接收器的一部分。您可以从QueueClient实例调用该方法,

如何更新接收队列消息处理程序上的锁? 在事件处理程序上,测试消息没有“续订锁”属性

Message testMessage;


您上面发布的RenewLock api链接来自旧的不推荐使用的WindowsAzure.ServiceBus nuget包,其中RenewLock方法是BrokeredMessage的一部分。

当前包Microsoft.Azure.ServiceBus(您正确使用的)将RenewLockAsync方法作为接收器的一部分。您可以从QueueClient实例调用该方法,如
QueueClient.RenewLockAsync(testMessage)
QueueClient.RenewLockAsync(message.SystemProperties.LockToken)

但是,您可以通过设置MessageHandlerOptions的MaxAutoRenewDuration属性来利用自动续订锁定功能,而不必手动执行。这将位于中的方法RegisterOnMessageHandlerAndReceiveMessages中

静态无效注册表onMessageHandlerandReceiveMessages()
{
//根据异常处理、要传递的并发消息数等配置MessageHandler选项。
var messagehandler options=新的messagehandler选项(例外ReceivedHandler)
{
//对回调“ProcessMessagesAsync”的最大并发调用数,为简单起见设置为1。
//根据应用程序希望并行处理的消息数量设置。
MaxConcurrentCalls=1,
//指示MessagePump是否应在从用户回调返回后自动完成消息。
//下面的False表示将由用户回调处理完成,如下面的“ProcessMessagesAsync”中所示。
自动完成=错误,
// https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock
MaxAutoRenewDuration=
};
//注册将处理消息的函数
RegisterMessageHandler(ProcessMessagesSync、messageHandlerOptions);
}

目前,建议使用Azure.Messaging.ServiceBus NuGet软件包,因为Microsoft.Azure.ServiceBus已过期。以下是自动续订处理消息的示例代码:

var client = new ServiceBusClient(connectionString);
var processor = client.CreateProcessor(queueName, new ServiceBusProcessorOptions
{
    MaxAutoLockRenewalDuration = TimeSpan.FromHours(100),
});
processor.ProcessMessageAsync += async arg =>
{
    //process your message
    await Task.Delay(Timeout.Infinite);
};
processor.ProcessErrorAsync += async arg =>
{
    //process errors
};


谢谢,我还有最后一个问题,我们公司将获得Microsoft Azure顾问与Microsoft合作,建立帐户autorenew有什么意义?为什么不在不续订的情况下使用更长的锁定持续时间?@Wouter,锁定持续时间最多为5分钟。因此,如果处理时间更长,则需要续订。好的。。。但它仍然会自动恢复,直到最大自动恢复时间。。。因此,只要将5分钟的限制更改为MaxAutoRenewDuration,您就永远不需要续费了。(我们有一个超时时间(人为限制为5分钟)…我们续费时间很短…续费很难…我们喜欢自动续费…所以我们有一个更长的超时时间(限制为MaxAutoRenewDuration?)
var client = new ServiceBusClient(connectionString);
var processor = client.CreateProcessor(queueName, new ServiceBusProcessorOptions
{
    MaxAutoLockRenewalDuration = TimeSpan.FromHours(100),
});
processor.ProcessMessageAsync += async arg =>
{
    //process your message
    await Task.Delay(Timeout.Infinite);
};
processor.ProcessErrorAsync += async arg =>
{
    //process errors
};