azure - Azure ServiceBus Lock Expired Exceptions under load
问题描述
使用 Azure Functions 使用服务总线消息,我们在负载测试期间看到一堆 MessageLockLostException。
{"assembly":"Microsoft.Azure.ServiceBus, Version=3.4.0.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c","method":"Microsoft.Azure.ServiceBus.Core.MessageReceiver+<DisposeMessagesAsync>d__99.MoveNext","level":0,"line":0}
{"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e","method":"System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw","level":1,"line":0}
{"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e","method":"System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess","level":2,"line":0}
{"assembly":"Microsoft.Azure.ServiceBus, Version=3.4.0.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c","method":"Microsoft.Azure.ServiceBus.RetryPolicy+<RunOperation>d__19.MoveNext","level":3,"line":0}
{"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e","method":"System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw","level":4,"line":0}
{"assembly":"Microsoft.Azure.ServiceBus, Version=3.4.0.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c","method":"Microsoft.Azure.ServiceBus.RetryPolicy+<RunOperation>d__19.MoveNext","level":5,"line":0}
{"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e","method":"System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw","level":6,"line":0}
{"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e","method":"System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess","level":7,"line":0}
{"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e","method":"System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification","level":8,"line":0}
{"assembly":"Microsoft.Azure.ServiceBus, Version=3.4.0.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c","method":"Microsoft.Azure.ServiceBus.Core.MessageReceiver+<CompleteAsync>d__68.MoveNext","level":9,"line":0}
{"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e","method":"System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw","level":10,"line":0}
{"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e","method":"System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess","level":11,"line":0}
{"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e","method":"System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification","level":12,"line":0}
{"assembly":"Microsoft.Azure.ServiceBus, Version=3.4.0.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c","method":"Microsoft.Azure.ServiceBus.MessageReceivePump+<CompleteMessageIfNeededAsync>d__16.MoveNext","level":13,"line":0}
我们正在使用自动更新。
我相信问题出在我们的 CustomMessageProcessor : MessageProcessor
public override Task CompleteProcessingMessageAsync(Message message, FunctionResult result, CancellationToken cancellationToken)
{
currentContext.Dispose();
return base.CompleteProcessingMessageAsync(message, result, cancellationToken);
}
我们可以像这样使用自动完成重载基础 CompleteProcessingMessageAsync 吗?
解决方案
推荐阅读
- swift - 如何在 Process() 中包含命令修饰符?
- node.js - 如何使用 process.env 和在 NGINX 中运行的构建 node.js 应用程序
- c++ - 如何使用友元函数中的嵌套类?
- java - 如何将嵌套的 JsonObjects 作为 JSON 字符串遍历?
- php - 使用explode方法从数据库中提取日期时间
- c# - 如何在没有 IdentityServer 或 OAuth 的情况下配置 JWT STS
- firefox - Firefox 会停止在 Stackoverflow 或 github 中显示带有代码的页面,而 chromium 不会
- javascript - 如何使用 JavaScript 对 HTML 表单执行表单验证?
- linux - 我在编写检查文本文件以查看其中是否存在的“For Loop”语句时遇到问题
- python - 使用基于 openpose 存储库的姿势训练器存储库捕获视频时出错