Azure 服务总线不断抛出 MessageLockLostException

2023-11-29

我不断得到MessageLockLostExceptions处理消息时。

  • 我将 Microsoft.Azure.ServiceBus 3.2.0 与 .NET Core 2.1 一起使用。
  • 我有一个队列LockDuration设置为 30 秒,已包含许多要处理的消息。
  • 我从以下位置获取了非常基本的消息接收教程代码https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues#receive-messages-from-the-queue,效果很好。

现在我想模拟一个运行时间稍长的消息处理任务(但仍然在LockDuration) 通过增加Task.Delay(10_000)。但后来我得到了MessageLockLostException恰好每 4 条消息。

即使我设置了也会发生这种情况MaxAutoRenewDuration = TimeSpan.FromDays(30) and PrefetchCount = 0.


这是消息处理方法,我稍微修改一下,打印出剩余的锁定时长:

    private static async Task processMessagesAsync(Message message, CancellationToken token)
    {
        Console.Write($"Received message: {message.SystemProperties.SequenceNumber}. Remaining lock duration: {message.SystemProperties.LockedUntilUtc - DateTime.UtcNow}");
        await Task.Delay(10000);
        await queueClient.CompleteAsync(message.SystemProperties.LockToken);
        Console.WriteLine(" - Complete!");
    }

示例输出:

======================================================
Press ENTER key to exit after receiving all the messages.
======================================================
Received message: 3659174697238584. Remaining lock duration: 00:00:30.8269132 - Complete!
Received message: 19421773393035331. Remaining lock duration: 00:00:20.5271654 - Complete!
Received message: 11540474045136941. Remaining lock duration: 00:00:10.3372697 - Complete!
Received message: 15762598695796784. Remaining lock duration: 00:00:00.1776760
Message handler encountered an exception     Microsoft.Azure.ServiceBus.MessageLockLostException: The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue. Reference:2c6caac3-e607-4130-a522-f75e4636e130, TrackingId:3ff82738-664d-4aca-b55f-ba3900f1c640_B17, SystemTracker:ocgtesting:queue:workflow~63, Timestamp:2018-12-12T17:01:59
at Microsoft.Azure.ServiceBus.Core.MessageReceiver.OnRenewLockAsync(String lockToken) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\Core\MessageReceiver.cs:line 1260
at Microsoft.Azure.ServiceBus.Core.MessageReceiver.<>c__DisplayClass74_0.<<RenewLockAsync>b__0>d.MoveNext() in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\Core\MessageReceiver.cs:line 771
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.Azure.ServiceBus.RetryPolicy.RunOperation(Func`1 operation, TimeSpan operationTimeout) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\RetryPolicy.cs:line 83
at Microsoft.Azure.ServiceBus.RetryPolicy.RunOperation(Func`1 operation, TimeSpan operationTimeout) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\RetryPolicy.cs:line 105
at Microsoft.Azure.ServiceBus.Core.MessageReceiver.RenewLockAsync(String lockToken) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\Core\MessageReceiver.cs:line 773
at Microsoft.Azure.ServiceBus.Core.MessageReceiver.RenewLockAsync(Message message) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\Core\MessageReceiver.cs:line 742
at Microsoft.Azure.ServiceBus.MessageReceivePump.RenewMessageLockTask(Message message, CancellationToken renewLockCancellationToken) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\MessageReceivePump.cs:line 248.

完整代码在这里:https://pastebin.com/sFGBgE0s


您的重现中缺少的一件事是队列描述。请务必注意这些细节,因为您遇到的问题与客户端无关,很可能与代理或底层 AMQP 库有关。

对于非分区队列,此设置工作正常。它不适用于分区队列(标准层)。新老客户均可观察。我已经提出了相关的经纪人issue供 Azure 服务总线团队进行调查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure 服务总线不断抛出 MessageLockLostException 的相关文章

随机推荐

  • 在 Android 中模糊图像

    我正在使用以下代码来模糊 android 中的图像 但它不起作用 我得到的最终图像颜色非常扭曲 而不是我想要的模糊 我究竟做错了什么 public Bitmap blurBitmap Bitmap bmpOriginal int width
  • 如何从 Eval: in .dir-local.el 设置缓冲区局部变量?

    为什么这有效 nil compilation directory home vava code directory compilation command rake 这不是吗 nil Eval setq compilation direct
  • PHP Google Sheets API - 权限被拒绝

    您好 我刚刚开始学习 PHP 并且正在尝试使用 Google Sheets API 我以为我遵循了他们的指示 我可以很好地调用和编辑工作表数据 但只能公共访问 当我将访问状态更改为私人或组时 我遇到以下消息 PHP Fatal error
  • 使用 AspNet.Security.OpenIdConnect.Server 注销 (ASP.NET vNext)

    我正在使用 Visual Studio 2015 Enterprise 和 ASP NET vNext Beta8 来发行和使用 JWT 令牌 如下所述here 在我们的实现中 我们在令牌发布时将一些客户端详细信息存储在 Redis 中 并
  • 转换为 .NET 4 后,在 VS2010 中将字段附加到记录集时出现奇怪的错误

    我有这个网站的一些代码代码项目链接将数据表转换为记录集 这段代码一直工作正常 直到我更改为 NET 4 以前是 2 现在当我调用以下行时 Dim result As New ADODB Recordset result CursorLoca
  • 如何使用 Indy TIdTCPServer 跟踪客户端数量

    我想知道当前到 Indy 9 TIdTCPServer 的客户端连接数 在 Delphi 2007 上 我似乎找不到提供此功能的属性 我尝试在服务器 OnConnect OnDisconnect 事件上增加 减少计数器 但当客户端断开连接时
  • 我该如何处理代码以避免被杀?

    I got Killed运行一段代码后 代码的第一部分是 def load data distance file distance min dis max dis sys float info max 0 0 num 0 with open
  • MongoDB批量插入忽略重复

    我用谷歌搜索了一下 找不到任何关于如何在使用批量插入时忽略重复错误的可靠信息 这是我当前使用的代码 MongoClient connect mongoURL function err db if err console err err le
  • PHP 将月份数字转换为短月份名称[重复]

    这个问题在这里已经有答案了 我需要将月份编号转换为短月份名称 即 1 表示一月 2 表示二月 我知道我可以通过数组来实现这一点 但是还有其他方法吗 帮助表示赞赏 Thanks 就在这里 使用date stftime结合mktime创建所需月
  • yang 中默认值的条件赋值

    我的模型有两个属性 叶协议 叶端口 我想具体说明的是 如果协议 ssh 那么默认端口值为 22 如果协议 http 那么默认端口值为 80 etc 我该如何用 yang 来表达这个意思 没有条件的defaultYANG 值 你需要两个def
  • OpenQA.Selenium.WebDriverException:“无法在 http://localhost:60623/ 上启动驱动程序服务”

    以下代码在过去效果很好 几天后 我尝试再次运行它 但它抛出了这样的错误 using OpenQA Selenium using OpenQA Selenium Chrome using OpenQA Selenium Support UI
  • 如何移动自定义对话框?

    我是安卓初学者 我正在创建一个自定义对话框 它工作正常 但这个对话框没有动 如何移动这个自定义对话框 例如在Windows中包含记事本 画图等 当您单击此 记事本 画图等 标题栏时可以移动位置 如果可能 请发送如何移动对话框的信息 否则 如
  • window.print 不适用于 Opera 浏览器

    我正在尝试使用 javascript 代码在 Opera 浏览器中打开打印对话框 就好像我使用以下代码 Opera 浏览器可以理解并能够打开打印对话框
  • 如果元素存在等待它消失

    所以我正在尝试编写一些 cypress 代码 但我认为文档并不是很清楚 我有两种情况 页面加载时没有加载微调器 页面通过加载微调器加载 我想编写能够满足这两种情况的代码 并让测试继续进行 如果页面没有加载微调器元素 照常继续测试 如果页面确
  • 为什么每个观察委托都在新线程上运行

    在 Rx 中 当使用 Scheduler NewThread 作为 ObserveOn 方法时 当 Rx 已经保证 OnNext 永远不会重叠时 让每个观察委托 OnNext 在新线程上运行有什么好处 如果每个 OnNext 都会被一个接一
  • Flutter Table Calendar:显示从 API 到表日历的事件

    我想显示日历并包括事件 该事件已从 API 中存在 我搜索适合我的情况的插件 我发现表格日历插件 我阅读了手动显示事件的示例并发现了它 override void initState super initState final select
  • 如何读取使用 R 加密的 .xls 文件?

    通常我使用readxl用于读取 excel 文件的包 非常好 read excel path ihateexcel xls sheet 1 但是 如果我尝试读取加密的 xls 文件 会话基本上会冻结 显然不想将文件保存为 csv 因为我会丢
  • Jquery 文件树 - 如何在文件夹单击时返回文件夹名称

    我已经安装并尝试自定义 Jquery 文件树 以便单击文件夹名称时 文件夹名称和路径将返回到调用函数 目前它仅展开和折叠文件夹 并在单击文件时返回文件名 所以我也需要返回该文件夹 但看不到它是在哪里触发的 我正在使用 php 连接器 下面的
  • 如何使 JFileChooser 在断开网络驱动器时正常运行?

    当我在网络驱动器断开连接的系统上创建 JFileChooser 时 需要很长时间才能显示 JFileChooser 它会通过单个断开连接的网络驱动器阻止 EDT 大约 20 秒 这似乎是一个常见问题 但我找不到解决方法 我见过的可能的选择是
  • Azure 服务总线不断抛出 MessageLockLostException

    我不断得到MessageLockLostExceptions处理消息时 我将 Microsoft Azure ServiceBus 3 2 0 与 NET Core 2 1 一起使用 我有一个队列LockDuration设置为 30 秒 已