提供的锁无效 [英] Lock supplied is invalid

查看:12
本文介绍了提供的锁无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是Microsoft Azure服务总线队列,每当我在本地运行它时,都会收到以下两个错误:

无法从文件确定项目语言。请使用[--cSharp、--javascript、--tyescript、--java、--python、--PowerShell]中的一个

Microsoft.Azure.ServiceBus.MessageLockLostException:提供的锁无效。锁定已过期,或者该消息已从队列中删除,或者已由其他接收方实例接收。

以下是我的代码:

public async Task Run([ServiceBusTrigger("<queue-name>", Connection = "queueConnectionString")] Message message, MessageReceiver messagereceiver, ILogger logger)
{
    var bodyJson = Encoding.UTF8.GetString(message.Body);
    var myMessage = JsonConvert.DeserializeObject<NewSubmissionMessage>(bodyJson);
    try
    {
        await _application.ProcessNewSubmission(myMessage);
        await messagereceiver.CompleteAsync(message.SystemProperties.LockToken);
    }
    catch (InvalidPackageException ex)
    {
        await messagereceiver.DeadLetterAsync(message.SystemProperties.LockToken, deadLetterReason: ex.Message);
    }
}

推荐答案

请检查您是否使用的是最新版本的扩展。如果不是4.1.1,请升级。 参考:https://github.com/Azure/azure-functions-servicebus-extension/issues/38

如果发生此类问题,建议使用服务总线资源管理器工具检查死信原因。以下文档提到了与服务总线中死字相关的详细信息,以及消息死字的各种原因: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues

例如:如果问题出在交货计数上,您可以将MaxDeliveryCount增加到其最大值(即10)

您可以尝试显式实现重试逻辑: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-exceptions#messagelocklostexception https://github.com/jeffhollan/functions-csharp-queue-exponential/blob/master/ExponentialRetry.cs https://docs.microsoft.com/en-us/azure/architecture/best-practices/retry-service-specific#service-bus

以下是一些可供您参考的相关链接:

The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue-由于自动完成默认为真。将该值更新为False后,已解决该问题。

https://github.com/MassTransit/MassTransit/issues/802#issuecomment-294879874-从AMQP切换到NetMessaging协议后,问题得到解决。

https://social.msdn.microsoft.com/Forums/azure/en-US/b86a64bb-cfcf-422b-a5fb-d831b7702c29/getting-an-exception-message-handler-encountered-an-exception?forum=servbus-使用"ReceiveandDelete"模式后问题已解决。

但是,我们推荐使用"PeekLock"。

第一个错误请参考this

这篇关于提供的锁无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆