Настройка:
- 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
, если эта ошибка произошла безуспешно, возникает то же исключение.