Как решить SocketExceptions в Azure EventHub при отправке сообщений - PullRequest
0 голосов
/ 14 сентября 2018

Настройка:

  • Azure EventHub, который масштабируется для использования 2 разделов и 1 единицы пропускной способности
  • Подключение с использованием AMQP
  • NETCore 2.1
  • Нет прокси, нет VNets
  • Служба работает в кластере 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, культура = нейтральная, PublicKeyToken = 7cec85d7bea7798e) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 7cec85d7bea7798e) в Microsoft.Azure.EventHubs.Amqp.AmqpEventHubClient + d__32.MoveNext (Microsoft.Azure.EventHubs, версия = 2.1.0.0, культура = нейтральная, PublicKeyToken = 7e34167dcc6d6d8c)
[...]
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 7cec85d7bea7798e) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 7cec85d7bea7798e) в My.Company.Data.Azure.EventHubs.EventHubSender + d__5.MoveNext (My.Company.Core.Data.Azure, версия = 1.2018.9.142, культура = нейтральная, PublicKeyToken = нуль)

Обновление Я также попытался избавиться от eventHubClient, если эта ошибка произошла безуспешно, возникает то же исключение.

...