public void MultipleQueueControllerConfigTest()
        {
            var master = new QueueControllerMultiple()
            {
                ConnectionString = "QueueMessageManager"
            };
            master.Initialize();   // read configuration values

            Assert.IsNotNull(master);
            Assert.IsTrue(master.Controllers.Count > 0);

            foreach (var controller in master.Controllers)
            {               
                Console.WriteLine(controller.QueueName + ", " + controller.ThreadCount + ", " + controller.WaitInterval);
            }
        }
        public void QueueControllerMultipleTest()
        {
            var manager = new QueueMessageManagerSql();

            // sample - create 3 message in 'default' queue
            for (int i = 0; i < 3; i++)
            {
                var item = new QueueMessageItem()
                {
                    Message = "Print Image",
                    Action = "PRINTIMAGE",
                    TextInput = "4334333", // image Id
                    QueueName = "Queue1"
                };

                // sets appropriate settings for submit on item
                manager.SubmitRequest(item);

                // item has to be saved
                Assert.IsTrue(manager.Save(), manager.ErrorMessage);
                Console.WriteLine("added to Queue1:" + manager.Item.Id);
            }

            // sample - create 3 message in 'default' queue
            for (int i = 0; i < 3; i++)
            {
                var item = new QueueMessageItem()
                {
                    Message = "Print Image (2nd)",
                    Action = "PRINTIMAGE",
                    TextInput = "5334333", // image Id
                    QueueName = "Queue2"
                };

                // sets appropriate settings for submit on item
                manager.SubmitRequest(item);

                // item has to be saved
                Assert.IsTrue(manager.Save(), manager.ErrorMessage);
                Console.WriteLine("added to Queue2: " + manager.Item.Id);
            }

            

            // create a new Controller to process in the background
            // on separate threads
            var controller = new QueueControllerMultiple(new List<QueueController>()
            {
                new QueueControllerMultiple()
                {
                    QueueName = "Queue1",
                    WaitInterval = 300,
                    ThreadCount = 5
                },
                new QueueControllerMultiple()
                {
                    QueueName = "Queue2",
                    WaitInterval = 500,
                    ThreadCount = 3
                }
            });                     
                        

            // Point all controllers at the same execution handlers
            // Alternately you can configure each controller with their
            // own event handlers or implement custom controller subclasses
            // that use the OnXXX handlers to handle the events
            controller.ExecuteStart += controller_ExecuteStart;
            controller.ExecuteComplete += controller_ExecuteComplete;
            controller.ExecuteFailed += controller_ExecuteFailed;
            
            // actually start the queue
            Console.WriteLine("Starting... Async Manager Processing");

            controller.StartProcessingAsync();

            // For test we have to keep the threads alive 
            // to allow the 10 requests to process
            Thread.Sleep(2000);

            // shut down
            controller.StopProcessing();
            
            Thread.Sleep(200);

            Console.WriteLine("Stopping... Async Manager Processing");
            Assert.IsTrue(true);

            Console.WriteLine("Processed: " + controller.MessagesProcessed);
        }