首页 > 解决方案 > 发送消息时如何解决 Azure EventHub 中的 SocketExceptions

问题描述

设置:

代码

// ###########
// 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=7e3416​​7dcc6d6d8c)
[...]
在 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如果发生此错误但没有成功,则会发生相同的异常。

标签: c#azure.net-coreazure-eventhub

解决方案


推荐阅读