c# - Azure ServiceBus FaultTolerantAmqpObject`1' 异常
问题描述
因此,由于需要 TLS 1.2,我已升级到 Azure.Messaging.ServiceBus 版本 7.1.2,并将我的项目升级到 .NET 4.7.2。我像这样重写了监听器(这是一个本地 Windows 服务) BusListener.cs
:
public static async Task ReceiveMessagesAsync()
{
await using (ServiceBusClient client = new ServiceBusClient(ConfigurationManager.AppSettings[SERVICE_BUS_CONNECTION_STRING]))
{
ServiceBusProcessor processor = client.CreateProcessor(QUEUE_NAME, new ServiceBusProcessorOptions());
processor.ProcessMessageAsync += MessageHandler;
processor.ProcessErrorAsync += ErrorHandler;
await processor.StartProcessingAsync();
}
}
我在我的 Windows 服务中调用ServiceMain.cs
Task.Run(() => BusListener.ReceiveMessagesAsync());
等待大约 10 秒后,我收到此错误,但从未收到任何消息:
Cannot access a disposed object. Object name: 'FaultTolerantAmqpObject`1'. - at Microsoft.Azure.Amqp.Singleton`1.d__13.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Azure.Messaging.ServiceBus.Amqp.AmqpConnectionScope.d__54.MoveNext()
我环顾四周,它看起来像来自另一个答案:Service Bus Disposed Object that I could be run into issues due to the method is static,即使这是我在微软“如何”指南中遵循的内容:https ://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues
我不确定是我写错了服务总线部分还是我遗漏了其他东西?有没有办法只 ping 或测试连接以更好地了解问题所在?
解决方案
当您创建 时ServiceBusClient
,它拥有与它创建的任何子对象使用的服务的连接。通过在此行中处理客户端:
await using (ServiceBusClient client = new ServiceBusClient(ConfigurationManager.AppSettings[SERVICE_BUS_CONNECTION_STRING]))
您正在关闭您创建的处理器使用的连接。我建议将客户端从方法中提升出来,并允许它在应用程序的整个生命周期内作为单例存在。一般来说,这是我们推荐用于管理 Azure 客户端的方法。 (见:客户生命周期)
推荐阅读
- vb.net - 我可以重复使用表单来声明多个变量吗?
- wordpress - 去除除管理员以外的所有用户角色的简码
- asp.net-core - 强制刷新 IMemoryCache
- azure - 如何禁用 Azure 门户环境
- angular - 从对象数组中显示“实时”数量总和的最佳方式
- python - 两个有许多关系的 Django 树模型
- java - 如何以 JSON 格式下载 WordPress 数据?
- python - 如何确保 con1D 的 output_shape 与 keras 自动编码器中具有时间序列的 input_shape 相同?
- apache-kafka - 如何忽略从同一主题读取和写入不同事件类型的 Kafka Streams 应用程序中的某些类型的消息
- jupyter-notebook - 如何优雅地退出 jupyter notebook 上的 ipython 脚本