【问题标题】:Lock supplied is invalid提供的锁无效
【发布时间】:2020-12-27 09:16:30
【问题描述】:

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

无法从文件中确定项目语言。请使用 [--csharp、--javascript、--typescript、--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);
    }
}

【问题讨论】:

  • 您似乎在 C# 中使用 azure 函数?
  • 没错——我用的是C#
  • 第一个问题应该和local.settings.json有关。对于第二个问题,能否展示一下你正在使用的代码和汇编版本?

标签: azureservicebus azure-servicebus-queues


【解决方案1】:

请检查您是否使用的是最新版本的扩展程序。如果那不是 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 - 由于自动完成默认为 true。将值更新为 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

【讨论】:

  • 感谢您的详细解释,我现在也遇到了同样的问题。
猜你喜欢
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2020-07-12
  • 2020-12-13
  • 1970-01-01
  • 2014-04-19
  • 2016-11-07
  • 1970-01-01
相关资源
最近更新 更多