Я использую пакет NuGet RabbitMQ.Client 5.1.0 в приложении .NET Core 2.1. Он открывает несколько подключений к одному серверу RabbitMQ для прослушивания сообщений в очереди. Я обнаружил, что первый вызов ConnectionFactory.CreateConnection()
всегда быстрый (100 мс или около того), но последующие вызовы, сделанные уже во время прослушивания, иногда могут занимать 3-10 секунд.
Простой код для воспроизведения проблемы:
for (var i = 1; i <= 10; ++i)
{
var factory = new ConnectionFactory
{
HostName = hostName,
UserName = userName,
Password = password
};
var stopwatch = Stopwatch.StartNew();
var connection = factory.CreateConnection();
Console.WriteLine($"[{i}] CreateConnection took {stopwatch.ElapsedMilliseconds:N0} ms");
var channel = connection.CreateModel();
channel.BasicQos(0, 200, false);
var consumer = new EventingBasicConsumer(channel);
channel.BasicConsume(queueName, false, consumer);
}
(Реальное приложение запускает каждое соединение в отдельном потоке, но, похоже, это не имеет значения.)
Типичная мощность:
[1] CreateConnection took 109 ms
[2] CreateConnection took 38 ms
[3] CreateConnection took 61 ms
[4] CreateConnection took 362 ms
[5] CreateConnection took 390 ms
[6] CreateConnection took 1,261 ms
[7] CreateConnection took 3,043 ms
[8] CreateConnection took 1,047 ms
[9] CreateConnection took 381 ms
[10] CreateConnection took 376 ms
Я что-то не так делаю или это похоже на проблему с клиентской библиотекой RabbitMQ?