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);
}