private async Task Run(string[] args) { var host = ConfigurationManager.AppSettings["rabbit.host"]; var user = ConfigurationManager.AppSettings["rabbit.admuser"]; var pwd = ConfigurationManager.AppSettings["rabbit.admpwd"]; var vhost = ConfigurationManager.AppSettings["rabbit.vhost"]; LogAdapter.LogDebugFn = (s, s1, arg3) => { }; LogAdapter.ExtendedLogEnabled = false; LogAdapter.ProtocolLevelLogEnabled = false; _hdrHistogram = new LongHistogram(1, 1000 * 10, 5); int howManyQueues = 10; bool exclusiveConnections = ConfigurationManager.AppSettings["exclusiveConnections"] == "true"; bool useOfficialClient = ConfigurationManager.AppSettings["useOfficialClient"] == "true"; if (useOfficialClient) { RabbitMQ.Client.IConnection conn = null; RabbitMQ.Client.IModel channel = null; for (int i = 0; i < howManyQueues; i++) { var connFac = new RabbitMQ.Client.ConnectionFactory() { HostName = host, UserName = user, Password = pwd, VirtualHost = vhost, AutomaticRecoveryEnabled = false }; if (exclusiveConnections || conn == null) { conn = connFac.CreateConnection(); channel = conn.CreateModel(); channel.BasicQos(0, 300, false); } var q = "q." + i; channel.QueueDeclareNoWait(q, durable: true, exclusive: false, autoDelete: false, arguments: null); channel.BasicConsume(q, false, "con_" + q, arguments: null, consumer: new Consumer(channel)); } } else { RabbitMqNext.IConnection conn = null; RabbitMqNext.IChannel channel = null; for (int i = 0; i < howManyQueues; i++) { if (exclusiveConnections || conn == null) { conn = await RabbitMqNext.ConnectionFactory.Connect(host, vhost, user, pwd, recoverySettings : null, connectionName : "mod_perf_server"); channel = await conn.CreateChannel(); await channel.BasicQos(0, 300, false); } var q = "q." + i; await channel.QueueDeclare(q, passive : false, durable : true, exclusive : false, autoDelete : false, arguments : null, waitConfirmation : false); // TODO: test with parallel buffer copy + serialized too await channel.BasicConsume(ConsumeMode.SerializedWithBufferCopy, BuildConsumerFn(channel), q, "consumer_" + q, false, true, arguments : null, waitConfirmation : false); } } Console.WriteLine("Consuming.."); Console.CancelKeyPress += (sender, eventArgs) => { Console.WriteLine("Done\r\n"); Console.WriteLine("howManyQueues {0} exclusive Connections: {1} official client: {2} count {3}", howManyQueues, exclusiveConnections, useOfficialClient, _hdrHistogram.TotalCount); Console.WriteLine("\r\n"); _hdrHistogram.OutputPercentileDistribution(Console.Out); Console.ReadKey(); }; await Task.Delay(1); Thread.CurrentThread.Join(); }
private async Task Run(string[] args) { var host = ConfigurationManager.AppSettings["rabbit.host"]; var user = ConfigurationManager.AppSettings["rabbit.admuser"]; var pwd = ConfigurationManager.AppSettings["rabbit.admpwd"]; var vhost = ConfigurationManager.AppSettings["rabbit.vhost"]; LogAdapter.LogDebugFn = (s, s1, arg3) => { }; LogAdapter.ExtendedLogEnabled = false; LogAdapter.ProtocolLevelLogEnabled = false; int howManyQueues = 1; bool exclusiveConnections = ConfigurationManager.AppSettings["exclusiveConnections"] == "true"; bool useOfficialClient = ConfigurationManager.AppSettings["useOfficialClient"] == "true"; // if (useOfficialClient) // { // RabbitMQ.Client.IConnection conn = null; // RabbitMQ.Client.IModel channel = null; // // for (int i = 0; i < howManyQueues; i++) // { // var connFac = new RabbitMQ.Client.ConnectionFactory { HostName = host, UserName = user, Password = pwd, VirtualHost = vhost, AutomaticRecoveryEnabled = false }; // // if (exclusiveConnections || conn == null) // { // conn = connFac.CreateConnection(); // channel = conn.CreateModel(); // } // // var q = "q." + i; // channel.QueueDeclareNoWait(q, durable: true, exclusive: false, autoDelete: false, arguments: null); // // channel.BasicConsume(q, false, "con_" + q, arguments: null, consumer: new Consumer(channel)); // } // } // else { RabbitMqNext.LogAdapter.LogErrorFn = (scope, message, exc) => { Console.WriteLine("[Error] " + scope + " - " + message + " exception " + exc); }; RabbitMqNext.LogAdapter.LogWarnFn = (scope, message, exc) => { Console.WriteLine("[Warn] " + scope + " - " + message + " exception " + exc); }; RabbitMqNext.LogAdapter.LogDebugFn = (scope, message, exc) => { Console.WriteLine("[Dbg] " + scope + " - " + message + " exception " + exc); }; RabbitMqNext.IConnection conn = null; RabbitMqNext.IChannel channel = null; for (int i = 0; i < howManyQueues; i++) { if (exclusiveConnections || conn == null) { conn = await RabbitMqNext.ConnectionFactory.Connect(host, vhost, user, pwd, recoverySettings : null, connectionName : "mod_perf_server"); channel = await conn.CreateChannel(); } var q = "q." + i; await channel.QueueDeclare(q, passive : false, durable : true, exclusive : false, autoDelete : false, arguments : null, waitConfirmation : false); await channel.ExchangeDeclare("exctemp", "direct", durable : true, autoDelete : false, arguments : null, waitConfirmation : true); for (int j = 0; j < 1000; j++) { await channel.QueueBind(q, "exctemp", "routing_" + j, arguments : null, waitConfirmation : (j % 2 == 0)); } // TODO: test with parallel buffer copy + serialized too await channel.BasicConsume(ConsumeMode.ParallelWithBufferCopy, BuildConsumerFn(channel), q, "consumer_" + q, false, true, arguments : null, waitConfirmation : false); } } Console.WriteLine("Ready"); await Task.Delay(1); Thread.CurrentThread.Join(); }