代码之家  ›  专栏  ›  技术社区  ›  Martin

如何在发送消息时解决Azure EventHub中的SocketException

  •  0
  • Martin  · 技术社区  · 7 年前

    设置:

    • 使用AMQP的连接
    • 没有代理,就没有vnet

    密码

    // ###########
    // 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.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib,版本=4.0.0.0,区域性=中性, PublicKeyToken=7cec85d7bea7798e)at (System.Private.CoreLib,版本=4.0.0.0,区域性=中性, PublicKeyToken=7cec85d7bea7798e)at (Microsoft.Azure.EventHubs,版本=2.1.0.0,区域性=中性, PublicKeyToken=7e34167dcc6d6d8c)
    [...]
    在 (System.Private.CoreLib,版本=4.0.0.0,区域性=中性, PublicKeyToken=7cec85d7bea7798e)at (System.Private.CoreLib,版本=4.0.0.0,区域性=中性, PublicKeyToken=7cec85d7bea7798e)at My.Company.Data.Azure.EventHubs.EventHubSender+d_u5.MoveNext PublicKeyToken=null)

    使现代化 eventHubClient

    0 回复  |  直到 7 年前