static private async Task ProducerPerformanceTestAsync() { var configManager = CreateConfigurationManager(); var procuderFactory = new RMQProducerFactory(new RMQConnectionFactory()); var connectionSettings = configManager.GetConnectionSettings("connection"); var queueSettings = configManager.GetQueueSettings("MY_RMQ_TEST"); using (var producer = procuderFactory.CreateText(connectionSettings, queueSettings)) { while (true) { try { Console.WriteLine("Provide a command: quit, clear or a number"); var command = Console.ReadLine(); if (command == "quit" || command == "exit") { break; } if (command == "clear") { Console.Clear(); continue; } if (!int.TryParse(command, out int count) || count < 0) { Console.WriteLine("Invalid iteration number"); continue; } var sw = new Stopwatch(); sw.Reset(); sw.Start(); for (var i = 0; i < count; i++) { var data = $"Message from Ross: {i}"; await producer.SendAsync(data); } sw.Stop(); Console.WriteLine($"Done sending: {sw.ElapsedMilliseconds}"); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
static private Task ProducerAsync() { var configManager = CreateConfigurationManager(); var procuderFactory = new RMQProducerFactory(new RMQConnectionFactory()); var connectionSettings = configManager.GetConnectionSettings("connection"); var queueSettings = configManager.GetQueueSettings("MY_RMQ_TEST"); using (var producer = procuderFactory.CreateText(connectionSettings, queueSettings)) { producer.Send("test1"); producer.Send("test2"); producer.Send("test3"); producer.Send("test4"); } return(Task.CompletedTask); }
static async Task SimplePoolTestAsync() { var configManager = CreateConfigurationManager(); var consumerFactory = new RMQConsumerFactory(new RMQConnectionFactory()); var producerFactory = new RMQProducerFactory(new RMQConnectionFactory()); var subscriberFactory = new RMQSubscriberFactory(new RMQConnectionFactory()); var publisherFactory = new RMQPublisherFactory(new RMQConnectionFactory()); var factory = new RMQSenderReceiverFactory(consumerFactory, producerFactory, subscriberFactory, publisherFactory); using (var amqPool = new RMQPoolAsync(configManager, factory, 5)) { using (var producer = await amqPool.GetAsync <IRMQProducerText>("connection", "MY_RMQ_TEST")) { await producer.Instance.SendAsync("Simple test"); } } }
static void SimplePoolTest() { var configManager = CreateConfigurationManager(); var consumerFactory = new RMQConsumerFactory(new RMQConnectionFactory()); var producerFactory = new RMQProducerFactory(new RMQConnectionFactory()); var subscriberFactory = new RMQSubscriberFactory(new RMQConnectionFactory()); var publisherFactory = new RMQPublisherFactory(new RMQConnectionFactory()); var factory = new RMQSenderReceiverFactory(consumerFactory, producerFactory, subscriberFactory, publisherFactory); using (var rmqPool = new RMQPool(configManager, factory, 5)) { using (var producer = rmqPool.Get <IRMQProducerText>("connection", "MY_RMQ_TEST")) { producer.Instance.Send("Simple test"); } } }
static Task PoolTestAsync() { var configManager = CreateConfigurationManager(); var consumerFactory = new RMQConsumerFactory(new RMQConnectionFactory()); var producerFactory = new RMQProducerFactory(new RMQConnectionFactory()); var subscriberFactory = new RMQSubscriberFactory(new RMQConnectionFactory()); var publisherFactory = new RMQPublisherFactory(new RMQConnectionFactory()); var factory = new RMQSenderReceiverFactory(consumerFactory, producerFactory, subscriberFactory, publisherFactory); using (var amqPool = new RMQPoolAsync(configManager, factory, 5)) { var tasks = new List <Task>(); for (var i = 0; i < 10; i++) { var task = Task.Run(async() => { try { for (var j = 0; j < 10; j++) { using (var producer = await amqPool.GetAsync <IRMQProducerText>("connection", "MY_RMQ_TEST")) { var message = $"message: {i * j}"; await producer.Instance.SendAsync(message); Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId} - {producer.PoolId} - {producer.Instance.Id} - {message}"); } } } catch (Exception ex) { Console.WriteLine(ex); } }); tasks.Add(task); } Console.WriteLine("Waiting for Tasks to complete..."); Task.WaitAll(tasks.ToArray()); Console.WriteLine("Tasks completed."); return(Task.CompletedTask); } }
static private Task ProducerAsync() { var args = new Dictionary <string, object> { { "x-dead-letter-exchange", "" }, { "x-dead-letter-routing-key", "My.DLQ" } }; var procuderFactory = new RMQProducerFactory(new RMQConnectionFactory()); var connectionSettings = GetRMQConnectionSettings(); var queueSettings = new RMQQueueSettings("My.Queue", "My.Queue", true, false, false, true, arguments: args); using (var producer = procuderFactory.CreateText(connectionSettings, queueSettings)) { producer.Send("test1"); producer.Send("test2"); producer.Send("test3"); producer.Send("test4"); } return(Task.CompletedTask); }
static void PoolThreadTest() { var configManager = CreateConfigurationManager(); var consumerFactory = new RMQConsumerFactory(new RMQConnectionFactory()); var producerFactory = new RMQProducerFactory(new RMQConnectionFactory()); var subscriberFactory = new RMQSubscriberFactory(new RMQConnectionFactory()); var publisherFactory = new RMQPublisherFactory(new RMQConnectionFactory()); var factory = new RMQSenderReceiverFactory(consumerFactory, producerFactory, subscriberFactory, publisherFactory); using (var rmqPool = new RMQPool(configManager, factory, 2)) { for (var i = 0; i < 10; i++) { var t = new Thread(PoolThreadTestThread); t.Start(new Tuple <RMQPool, int>(rmqPool, i)); } Console.WriteLine("Waiting for Tasks to complete..."); Console.ReadKey(); Console.WriteLine("Show have terminated."); } }
static public async Task RunAsync() { var configuration = new RMQConfigurationManager($"{AppDomain.CurrentDomain.BaseDirectory}RMQSettings.Issue.json"); var connectionFactory = new RMQConnectionFactory(); var consumerFactory = new RMQConsumerFactory(connectionFactory); var producerFactory = new RMQProducerFactory(connectionFactory); var subscriberFactory = new RMQSubscriberFactory(connectionFactory); var publisherFactory = new RMQPublisherFactory(connectionFactory); var factory = new RMQSenderReceiverFactory(consumerFactory, producerFactory, subscriberFactory, publisherFactory); var pool = new RMQPoolAsync(configuration, factory, 10); var result = (RMQReceiverResultText)null; var queueDetails = configuration.GetQueueSettings("Engine.Inbound"); using (var container = await pool.GetAsync <IRMQConsumerText>("connection", queueDetails.Name)) { var reader = container.Instance; reader.Mode = ConsumerMode.OnNoMessage_ReturnNull; try { result = reader.Receive(1000); if (result != null) { } } catch (TimeoutException) { // no data, just return null as an indicator } catch (MessageException ex) { switch (ex.ExceptionCode) { case MessageExceptionCode.ExclusiveLock: await Task.Delay(1000); break; case MessageExceptionCode.LostConnection: await Task.Delay(1000); reader.ClearCacheBuffer(); throw; default: reader.ClearCacheBuffer(); throw; } } catch (Exception) { result?.Reject(); throw; } } //var qs = configManager.GetQueueSettings("Ross"); // await PublisherAsync("Ross", "Red"); // await ProducerPerformanceTestAsync(); // await ProducerAsync(); // await ConsumerAsync(); // await PoolTestAsync(); // await SimplePoolTestAsync(); // await PoolAsyncManagerReadTestAsync(); //var rmqConnectionSetting = new RMQConnectionSettings //{ // Name = "connection", // Username = "******", // Password = "******", // VirtualHost = "/", // DelayOnReconnect = 1500, // Uri = "amqp://some-host:5672" //}; //var queues = new List<RMQQueueSettings>(); //foreach (var queue in new[] { "Engine.Inbound","Engine.Outbound","ERROR.SparkEvents" }) //{ // queues.Add(new RMQQueueSettings(queue, queue, true, false, false, true)); //} //var config = new RMQConfigurationManager(new[] { rmqConnectionSetting }, queueSettings: queues); //var con = config.GetConnectionSettings("connection"); //var queuesetting = config.GetQueueSettings("lms.activity.items"); await Task.Delay(0); }