c# - 发送消息时如何解决 Azure EventHub 中的 SocketExceptions
问题描述
设置:
- Azure EventHub,它被缩放以使用 2 个分区和 1 个吞吐量单位
- 使用 AMQP 连接
- NETCore 2.1
- 没有代理,没有 VNet
- 服务在 ServiceFabric 群集(5 个节点)中运行
代码
// ###########
// 1. Try
var eventHubClient = EventHubClient.CreateFromConnectionString(connectionString);
var tasks = new List<Task>();
foreach(var message in messages)
{
var t = eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));
tasks.Add(t);
}
await Task.WhenAll(tasks);
await eventHubClient.CloseAsync();
// ###########
// 2. Try
var eventHubClient = EventHubClient.CreateFromConnectionString(connectionString);
foreach(var message in messages)
{
try
{
await eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));
}
catch(Exception)
{
await eventHubClient.CloseAsync();
eventHubClient = EventHubClient.CreateFromConnectionString(connectionString);
}
}
await eventHubClient.CloseAsync();
问题
当向这个 EventHub 发送数千条消息(甚至超过这个缩放可以处理的消息)时,我System.Net.Sockets.SocketException
从 AMQP 实现中得到一个(Microsoft.Azure.EventHubs
)。
并非所有消息都会被处理,异常会一直存在,直到我重新启动节点(发生在所有节点上)
System.Net.Sockets.SocketException:在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(System.Private.CoreLib,版本=4.0.0.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification( System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) 在 Microsoft.Azure.EventHubs.Amqp.AmqpEventHubClient+d__32.MoveNext (Microsoft.Azure.EventHubs, Version=2.1.0.0, Culture=neutral , PublicKeyToken=7e34167dcc6d6d8c)
[...]
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(System.Private.CoreLib,版本=4.0.0.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Private.CoreLib,版本= 4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) 在 My.Company.Data.Azure.EventHubs.EventHubSender+d__5.MoveNext (My.Company.Core.Data.Azure, Version=1.2018.9.142, Culture=neutral, PublicKeyToken =空)
更新
我还尝试处理eventHubClient
如果发生此错误但没有成功,则会发生相同的异常。
解决方案
推荐阅读
- android - 是否可以将非抽象 ViewModel 转换为扩展它的另一个 ViewModel?
- maven - 无法解析 mojo org.owasp:dependency-check-maven:5.2.4:check 的配置
- php - 获取特定分类术语的高级自定义字段组
- python - 如何在数据集上创建、训练和打印 RandomForestClassifer 的结果
- r - 如何从动物园对象中获取特定时间的所有日期?
- ruby-on-rails - 在 Rails 中制作可选控制器需要包含哪些模块?
- ios - 从 macOS 上的 Cocoa 应用程序访问 iOS 设备
- google-cloud-functions - 将 TensorflowJS 模型保存到 Firebase 存储的最佳实践?
- python - 将单例矩阵的熊猫数据帧转换为数字数据帧
- c# - DataGrid - 添加不属于数据的行(用于“目录导航”)