-
Notifications
You must be signed in to change notification settings - Fork 615
Closed
Description
We updated the version of RabbitMQ.Client library (from 5.1.2 to 6.1.0) and met a decrease in performance.
Below a minimal repro.
Framework: netcoreapp 3.1(our internal library netstandard 2.0)
RabbitMQ.Client library version: 5.1.2 and 6.1.0
RabbitMQ version: 3.8
Docker version: 19.03.8
Docker Image: rabbitmq:3.8-management-alpine
OS version: Win10 1903
attached our scripts to run a local cluster for tests
scripts.zip
For 5.1.2 i've got ~5 sec, for 6.1.0 ~58 sec
static void Main(string[] args)
{
var ids = Enumerable.Range(1, 512).Select(_ => Guid.NewGuid());
var (factory, resolver) = ConfigureFactoryAndResolver();
var sw = Stopwatch.StartNew();
using (var connection = factory.CreateConnection(resolver, "example"))
{
Parallel.ForEach(ids,
new ParallelOptions {MaxDegreeOfParallelism = ids.Count()},
id => Publish(connection, id));
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
}
private static void Publish(IConnection connection, Guid message)
{
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare("test-exchange", "topic", true);
channel.QueueDeclare("test-queue", true, false, false);
channel.QueueBind("test-queue", "test-exchange", "test-rk");
channel.BasicPublish("test-exchange", "test-rk", null, Encoding.UTF8.GetBytes(message.ToString()));
}
}
/// <summary>
/// Create Factory for v5.1.2
/// </summary>
private static (ConnectionFactory factory, DefaultEndpointResolver resolver) ConfigureFactoryAndResolver()
{
var connectionFactory = new ConnectionFactory
{
HostName = "127.0.0.11",
VirtualHost = "/",
Port = 5672,
UserName = "admin",
Password = "admin",
AutomaticRecoveryEnabled = true,
TopologyRecoveryEnabled = false,
RequestedHeartbeat = (ushort) TimeSpan.FromSeconds(10).TotalSeconds,
NetworkRecoveryInterval = TimeSpan.FromSeconds(5),
RequestedConnectionTimeout = (int) TimeSpan.FromSeconds(5).TotalMilliseconds,
ContinuationTimeout = TimeSpan.FromSeconds(20),
HandshakeContinuationTimeout = TimeSpan.FromSeconds(10),
SocketReadTimeout = (int) TimeSpan.FromSeconds(30).TotalMilliseconds,
SocketWriteTimeout = (int) TimeSpan.FromSeconds(30).TotalMilliseconds,
UseBackgroundThreadsForIO = true
};
var endpoints = new[] {"127.0.0.13", "127.0.0.12", "127.0.0.11"}.Select(h =>
new AmqpTcpEndpoint(h, connectionFactory.Port, connectionFactory.Ssl));
return (connectionFactory, new DefaultEndpointResolver(endpoints));
}
/// <summary>
/// Create Factory for v6.1.0
/// </summary>
// private static (ConnectionFactory factory, DefaultEndpointResolver resolver) ConfigureFactoryAndResolver()
// {
// var connection_factory = new ConnectionFactory();
// connection_factory.HostName = "127.0.0.13";
// connection_factory.VirtualHost = "/";
// connection_factory.Port = 5672;
// connection_factory.UserName = "admin";
// connection_factory.Password = "admin";
// connection_factory.AutomaticRecoveryEnabled = true;
// connection_factory.TopologyRecoveryEnabled = false;
// connection_factory.RequestedHeartbeat = TimeSpan.FromSeconds(10); // пинг идёт два раза за указанное время
// connection_factory.NetworkRecoveryInterval = TimeSpan.FromSeconds(5);
// connection_factory.RequestedConnectionTimeout = TimeSpan.FromSeconds(5);
// connection_factory.ContinuationTimeout = TimeSpan.FromSeconds(20);
// connection_factory.HandshakeContinuationTimeout = TimeSpan.FromSeconds(10);
// connection_factory.SocketReadTimeout = TimeSpan.FromSeconds(30);
// connection_factory.SocketWriteTimeout = TimeSpan.FromSeconds(30);
// connection_factory.UseBackgroundThreadsForIO = true;
//
// var endpoints = new[] {"127.0.0.13", "127.0.0.12", "127.0.0.11"}.Select(h =>
// new AmqpTcpEndpoint(h, connection_factory.Port, connection_factory.Ssl));
//
// return (connection_factory, new DefaultEndpointResolver(endpoints));
// }
ig-sinicyn
Metadata
Metadata
Assignees
Labels
No labels