azure - 带有 ServiceBus 的 Azure Functions:操作已取消
问题描述
我刚刚为我的 Azure Functions 部署了更新:定时器或服务总线触发器有不同的功能。最近几天我注意到一个与 ServiceBus 相关的错误
Microsoft.Azure.ServiceBus.ServiceBusCommunicationException - 操作已取消。
我不知道当函数收到消息或有其他事情时是否会发生这种情况。
该函数定义为
[FunctionName("createInvoiceListFromServiceBus")]
public async Task Run(
[ServiceBusTrigger("invoice.requests.bulk", "requests", Connection = "AccountingServiceBusConnection")]
string myQueueItem,
[ServiceBus("invoice.pdf.requests", Connection = "AccountingServiceBusConnection")]
IAsyncCollector<dynamic> pdfServiceBusRequests,
[ServiceBus("invoice.paid.requests", Connection = "AccountingServiceBusConnection")]
IAsyncCollector<dynamic> paidServiceBusRequests)
{
}
这是我正在使用的包
<PackageReference Include="AzureExtensions.Swashbuckle" Version="3.2.2" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" />
<PackageReference Include="Microsoft.Azure.KeyVault.Core" Version="3.0.5" />
<PackageReference Include="Microsoft.Azure.Storage.Blob" Version="11.1.7" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="4.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.4" />
<PackageReference Include="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.1.5" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" />
<PackageReference Include="Xero.Api.SDK.Core" Version="1.1.4" />
这里是完整的错误描述。
[
{
"parsedStack":[
{
"assembly":"Microsoft.Azure.ServiceBus, Version=4.1.1.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c",
"method":"Microsoft.Azure.ServiceBus.Core.MessageReceiver+<OnReceiveAsync>d__86.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":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification",
"level":3,
"line":0
},
{
"assembly":"Microsoft.Azure.ServiceBus, Version=4.1.1.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c",
"method":"Microsoft.Azure.ServiceBus.Core.MessageReceiver+<>c__DisplayClass64_0+<<ReceiveAsync>b__0>d.MoveNext",
"level":4,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw",
"level":5,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess",
"level":6,
"line":0
},
{
"assembly":"Microsoft.Azure.ServiceBus, Version=4.1.1.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c",
"method":"Microsoft.Azure.ServiceBus.RetryPolicy+<RunOperation>d__19.MoveNext",
"level":7,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw",
"level":8,
"line":0
},
{
"assembly":"Microsoft.Azure.ServiceBus, Version=4.1.1.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c",
"method":"Microsoft.Azure.ServiceBus.RetryPolicy+<RunOperation>d__19.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=4.1.1.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c",
"method":"Microsoft.Azure.ServiceBus.Core.MessageReceiver+<ReceiveAsync>d__64.MoveNext",
"level":13,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw",
"level":14,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess",
"level":15,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification",
"level":16,
"line":0
},
{
"assembly":"Microsoft.Azure.ServiceBus, Version=4.1.1.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c",
"method":"Microsoft.Azure.ServiceBus.Core.MessageReceiver+<ReceiveAsync>d__62.MoveNext",
"level":17,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw",
"level":18,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess",
"level":19,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification",
"level":20,
"line":0
},
{
"assembly":"Microsoft.Azure.ServiceBus, Version=4.1.1.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c",
"method":"Microsoft.Azure.ServiceBus.MessageReceivePump+<<MessagePumpTaskAsync>b__11_0>d.MoveNext",
"level":21,
"line":0
}
],
"severityLevel":"Information",
"outerId":"0",
"message":"The operation was canceled.",
"type":"Microsoft.Azure.ServiceBus.ServiceBusCommunicationException",
"id":"65258033"
},
{
"parsedStack":[
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw",
"level":0,
"line":0
},
{
"assembly":"Microsoft.Azure.Amqp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"method":"Microsoft.Azure.Amqp.AsyncResult.End",
"level":1,
"line":0
},
{
"assembly":"Microsoft.Azure.Amqp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"method":"Microsoft.Azure.Amqp.ReceivingAmqpLink.EndReceiveMessages",
"level":2,
"line":0
},
{
"assembly":"Microsoft.Azure.ServiceBus, Version=4.1.1.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c",
"method":"Microsoft.Azure.ServiceBus.Core.MessageReceiver+<>c__DisplayClass86_0.<OnReceiveAsync>b__1",
"level":3,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic",
"level":4,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw",
"level":5,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess",
"level":6,
"line":0
},
{
"assembly":"System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",
"method":"System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification",
"level":7,
"line":0
},
{
"assembly":"Microsoft.Azure.ServiceBus, Version=4.1.1.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c",
"method":"Microsoft.Azure.ServiceBus.Core.MessageReceiver+<OnReceiveAsync>d__86.MoveNext",
"level":8,
"line":0
}
],
"severityLevel":"Information",
"outerId":"65258033",
"message":"The operation was canceled.",
"type":"System.OperationCanceledException",
"id":"65736993"
}
]
解决方案
错误是暂时的吗?然后,很可能是您的应用程序与其依赖项之一之间存在某种连接问题。错误The operation was canceled
表示异步任务已取消,或者很可能已超时。
https://www.asptricks.net/2019/10/task-cancellationtoken-net-c-example.html
对于超时搜索...查看pasredStack
看起来超时的代码正在使用Microsoft.Azure.ServiceBus.Core.MessageReceiver
. 从您的主要主要run()
方法中,可以安全地推断出使用 的两个操作之一AccountingServiceBusConnection
可能已超时。
为了重现错误,我建议在同时负载测试这些底层资源的同时尝试此操作:pdfServiceBusRequests
和paidServiceBusRequests
或者,您可以延长一些隐式超时期限。想想那些服务。有什么可以超时的吗?我们使用的是 http 客户端还是 sql 客户端?这些客户端往往具有可以在代码中覆盖的隐式默认超时。我建议寻找对任何客户端进行 web 或 db 调用的任何引用,并搜索将它们的超时时间延长到最大以缓解问题。另一种选择可能是试图System.OperationCanceledException
优雅地捕捉和处理这些。
推荐阅读
- c++ - 关于 C++ 标准的歧义
- python - 有什么办法可以在我的 Windows 中安装 Tensorflow 0.12.1 和 Windows 10 操作系统?
- google-smart-home - 谷歌智能家居操作设备类型图标问题
- sql - 在 SQL 中,根据 where 子句中的条件对不同的列使用“case when”
- sql - TypeORM 限制不起作用,无论设置什么限制,查询都返回数组中的一个元素?
- python - 如何使用 if 条件在 1D 和 2D numpy 数组之间进行矢量化计算
- c++ - 检查文件描述符中可用缓冲区字符的数量
- javascript - 未捕获的类型错误:无法读取 HTMLImageElement 处未定义的属性“切换”。
- python-3.x - 如何在 Amazon Linux 环境中安装 Python mariadb 模块
- json - 将 JSON 转换为 multipart/form-data angular/ionic