public void SingleQueueControllerTest() { var manager = new QueueMessageManagerSql(); // sample - create 3 message for (int i = 0; i < 3; i++) { var item = new QueueMessageItem() { QueueName = "Queue1", Message = "Print Image", Action = "PRINTIMAGE", TextInput = "4334333" // image Id }; // sets appropriate settings for submit on item manager.SubmitRequest(item); // item has to be saved Assert.IsTrue(manager.Save(), manager.ErrorMessage); Console.WriteLine("added " + manager.Item.Id); } Console.WriteLine("Starting... Async Manager Processing"); // create a new Controller to process in the background // on separate threads var controller = new QueueController() { ConnectionString = "QueueMessageManager", ThreadCount = 2, WaitInterval = 200, QueueName = "Queue1" }; Console.WriteLine("Wait: " + controller.WaitInterval); // ExecuteStart Event is where your processing logic goes controller.ExecuteStart += controller_ExecuteStart; // ExecuteFailed and ExecuteComplete let you take actions on completion controller.ExecuteComplete += controller_ExecuteComplete; controller.ExecuteFailed += controller_ExecuteFailed; // actually start the queue controller.StartProcessingAsync(); // For test we have to keep the threads alive // to allow the 3 requests to process Thread.Sleep(2000); // shut down controller.StopProcessing(); Thread.Sleep(200); Console.WriteLine("Stopping... Async Manager Processing"); Assert.IsTrue(true); }
// global instances that keep controller and windows service alive public void Start(QueueMessageManager manager = null) { if (manager == null) manager = new QueueMessageManagerSql(); LogManager.Current.LogInfo("Start called"); var config = QueueMessageManagerConfiguration.Current; Controller = new QueueController() { ConnectionString = config.ConnectionString, QueueName = config.QueueName, WaitInterval = config.WaitInterval, ThreadCount = config.ControllerThreads }; LogManager.Current.LogInfo("Controller created."); // asynchronously start the SignalR hub SignalR = WebApplication.Start<SignalRStartup>("http://*:8080/"); // *** Spin up n Number of threads to process requests Controller.StartProcessingAsync(); LogManager.Current.LogInfo(String.Format("QueueManager Controller Started with {0} threads.", Controller.ThreadCount)); // Set static instances so that these 'services' stick around GlobalService.Controller = Controller; GlobalService.Service = this; }
public void LoadRequestTest() { var manager = new QueueMessageManagerSql(); var db = manager.Db; var item = db.Find <QueueMessageItem>("select TOP 1 * from queueMessageItems where IsComplete = 0"); // no pending items - nothing to do if (item == null) { Console.WriteLine("No pending items... nothing to do."); return; } string reqId = item.Id; // clear out item item = null; // load through manager item = manager.Load(reqId); Assert.IsNotNull(item, manager.ErrorMessage); item.Message = "Updated @ " + DateTime.Now.ToString("t"); item.PercentComplete = 10; Assert.IsTrue(manager.Save(), manager.ErrorMessage); }
public void SubmitRequestTest() { var manager = new QueueMessageManagerSql(); string imageId = "10"; // Create a message object // item contains many properties for pushing // values back and forth as well as a few message fields var item = manager.CreateItem(); item.Action = "PRINTIMAGE"; item.TextInput = imageId; item.Message = "Print Image operation started at " + DateTime.Now.ToString(); item.PercentComplete = 10; // *** you can also serialize objects directly into the Xml property // manager.Serialization.SerializeToXml(SomeObjectToSerialize); // add an arbitrary custom properties - serialized to Xml manager.Properties.Add("Time", DateTime.Now); manager.Properties.Add("User", "ricks"); // Set the message status and timestamps as submitted manager.SubmitRequest(item); // actually save the queue message to disk Assert.IsTrue(manager.Save(), manager.ErrorMessage); }
protected void Application_Start(object sender, EventArgs e) { // Pings the service and ensures it stays alive //scheduler = new ApplicationScheduler() //{ // CheckFrequency = 600000 //}; //scheduler.Start(); // QueueMessageManager Configuration launcher = new AspNetServiceLauncher<WebHostSampleQueueController>(); // customize how the QueueMessageManager is loaded on each request launcher.OnCreateQueueManager = () => { var manager = new QueueMessageManagerSql(); //manager.ConnectionString = "server=.;database=MessageQueues;integrated security=true;"; //var manager = new QueueMessageManagerSqlMsMq(); //manager.MsMqQueuePath = @".\private$\"; return manager; }; launcher.Start(); }
public void SubmitRequestsToQueueTest() { var manager = new QueueMessageManagerSql(); int queueCount = 30; bool res = true; for (int i = 0; i < queueCount; i++) { var msg = new QueueMessageItem() { QueueName = "MPWF", Message = "Xml Message #" + i + " @ " + DateTime.Now.ToString("t"), Action = "NEWXMLORDER" }; if (!manager.SubmitRequest(msg)) { Console.WriteLine(manager.ErrorMessage); } res = manager.Save(msg); if (!res) { break; } } }
protected void Application_Start(object sender, EventArgs e) { // Pings the service and ensures it stays alive //scheduler = new ApplicationScheduler() //{ // CheckFrequency = 600000 //}; //scheduler.Start(); // QueueMessageManager Configuration launcher = new AspNetServiceLauncher <WebHostSampleQueueController>(); // customize how the QueueMessageManager is loaded on each request launcher.OnCreateQueueManager = () => { var manager = new QueueMessageManagerSql(); //manager.ConnectionString = "server=.;database=MessageQueues;integrated security=true;"; //var manager = new QueueMessageManagerSqlMsMq(); //manager.MsMqQueuePath = @".\private$\"; return(manager); }; launcher.Start(); }
// global instances that keep controller and windows service alive public void Start(QueueMessageManager manager = null) { if (manager == null) { manager = new QueueMessageManagerSql(); } LogManager.Current.LogInfo("Start called"); var config = QueueMessageManagerConfiguration.Current; Controller = new QueueController() { ConnectionString = config.ConnectionString, QueueName = config.QueueName, WaitInterval = config.WaitInterval, ThreadCount = config.ControllerThreads }; LogManager.Current.LogInfo("Controller created."); // asynchronously start the SignalR hub SignalR = WebApplication.Start <SignalRStartup>("http://*:8080/"); // *** Spin up n Number of threads to process requests Controller.StartProcessingAsync(); LogManager.Current.LogInfo(String.Format("QueueManager Controller Started with {0} threads.", Controller.ThreadCount)); // Set static instances so that these 'services' stick around GlobalService.Controller = Controller; GlobalService.Service = this; }
public void CompleteMessageTest() { this.SubmitRequestWithPropertiesTest(); var manager = new QueueMessageManagerSql(); var item = new QueueMessageItem() { TextInput = "My input", Message = "Getting started." }; manager.CreateItem(item); manager.Properties["Time"] = DateTime.Now; Assert.IsTrue(manager.Save(), manager.ErrorMessage); string reqId = item.Id; manager = new QueueMessageManagerSql(); item = manager.GetNextQueueMessage(); DateTime?time = manager.GetProperty("Time") as DateTime?; Assert.IsNotNull(time); manager.CompleteRequest(item, "Message completed @" + DateTime.Now.ToString("t")); Assert.IsTrue(manager.Save(), manager.ErrorMessage); }
public void getQueueMessage(string id) { var queue = new QueueMessageManagerSql(); var qitem = queue.Load(id); Clients.Caller.getQueueMessageCallback(qitem); }
public void CreateQmmTableTest() { var qm = new QueueMessageManagerSql(connectionString); Assert.IsNotNull(qm); Assert.IsTrue(qm.CreateDatastore(), qm.ErrorMessage); }
public void GetWaitingQueueMessageCount() { using (var manager = new QueueMessageManagerSql()) { int count = manager.GetWaitingQueueMessageCount(GlobalService.Controller.QueueName); // broadcast to all clients Clients.All.getWaitingQueueMessageCountCallback(count); } }
public void GetWaitingMessagesCountTest() { var manager = new QueueMessageManagerSql(); int count = manager.GetWaitingQueueMessageCount(); Assert.IsNotNull(count > -1); Console.WriteLine(count + " queued items waiting."); }
public void GetRecentMessagesTest() { using (var manager = new QueueMessageManagerSql()) { var items = manager.GetRecentQueueItems(); foreach (var item in items) { Console.WriteLine(item.Id + " " + item.Message); } } }
public void SubmitRequestWithPropertiesTest() { var manager = new QueueMessageManagerSql(); manager.SubmitRequest(messageText: "New Entry with Properties"); // add a custom property manager.Properties.Add("Time", DateTime.Now); Assert.IsTrue(manager.Save(), manager.ErrorMessage); }
public void ConstructorOverrideTest() { var manager = new QueueMessageManagerSql(CONNECTION_STRING); Console.WriteLine(manager.ConnectionString); Assert.IsTrue(manager.ConnectionString == CONNECTION_STRING,"ConnectionString is not set"); manager = new QueueMessageManagerSql("MyApplicationConnectionString"); Console.WriteLine(manager.ConnectionString); Assert.IsTrue(manager.ConnectionString == "MyApplicationConnectionString"); }
public void ConstructorOverrideTest() { var manager = new QueueMessageManagerSql(CONNECTION_STRING); Console.WriteLine(manager.ConnectionString); Assert.IsTrue(manager.ConnectionString == CONNECTION_STRING, "ConnectionString is not set"); manager = new QueueMessageManagerSql("MyApplicationConnectionString"); Console.WriteLine(manager.ConnectionString); Assert.IsTrue(manager.ConnectionString == "MyApplicationConnectionString"); }
public void GetTimedoutMessagesTest() { var manager = new QueueMessageManagerSql(); var items = manager.GetTimedOutQueueMessages(); Assert.IsNotNull(items); foreach (var item in items) { Console.WriteLine(item.Submitted + " - " + item.Id + " - " + item.Message); } }
public void GetCompleteMessagesTest() { var manager = new QueueMessageManagerSql(); var items = manager.GetCompleteQueueMessages(); Assert.IsNotNull(items); foreach (var item in items) { Console.WriteLine(item.Completed + " - " + item.Id + " - " + item.Message); } }
/// <summary> /// Returns a count of messages that is waiting for a given queue or /// all queues /// </summary> /// <param name="queueName"></param> public void GetWaitingQueueMessageCount(string queueName = null) { if (string.IsNullOrEmpty(queueName)) { queueName = null; // force all } using (var manager = new QueueMessageManagerSql()) { int count = manager.GetWaitingQueueMessageCount(queueName); // broadcast to all clients Clients.All.getWaitingQueueMessageCountCallback(count); } }
private void btnCreateTable_Click(object sender, EventArgs e) { // Create database table and store procedure if it doesn't exist QueueMessageManager manager = new QueueMessageManagerSql(); if (!manager.CreateDatastore()) { MessageBox.Show(manager.ErrorMessage, "Error creating QueueTable", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { MessageBox.Show("QueueTable created", "Queue Table Creation", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
public void SubmitRequestWithPresetObjectTest() { string xml = "<doc><value>Hello</value></doc>"; var manager = new QueueMessageManagerSql(); var msg = new QueueMessageItem() { QueueName="MPWF", Message = "Xml Message @ " + DateTime.Now.ToString("t"), Action = "NEWXMLORDER", Xml = xml }; manager.SubmitRequest(msg); Assert.IsTrue(manager.Save(), manager.ErrorMessage); }
public void GetWaitingMessagesTest() { var manager = new QueueMessageManagerSql() { AutoCreateDataStore = true }; var items = manager.GetWaitingQueueMessages(); Assert.IsNotNull(items, manager.ErrorMessage); foreach (var item in items) { Console.WriteLine(item.Submitted + " - " + item.Id + " - " + item.Message); } }
public void SubmitRequestWithPresetObjectTest() { string xml = "<doc><value>Hello</value></doc>"; var manager = new QueueMessageManagerSql(); var msg = new QueueMessageItem() { QueueName = "MPWF", Message = "Xml Message @ " + DateTime.Now.ToString("t"), Action = "NEWXMLORDER", Xml = xml }; manager.SubmitRequest(msg); Assert.IsTrue(manager.Save(), manager.ErrorMessage); }
public void AddQueueItem() { var qm = new QueueMessageManagerSql(connectionString); var item = new QueueMessageItem() { Message = "Single SQL Entry", TextInput = "Process This", QueueName="MPWF", Action="HELLOWORLD", Xml = @"<doc> <company>West Wind</company> <name>Rick</name> </doc> " }; Assert.IsTrue(qm.SubmitRequest(item, null, true), qm.ErrorMessage); }
public void AddQueueItem() { var qm = new QueueMessageManagerSql(connectionString); var item = new QueueMessageItem() { Message = "Single SQL Entry", TextInput = "Process This", QueueName = "MPWF", Action = "HELLOWORLD", Xml = @"<doc> <company>West Wind</company> <name>Rick</name> </doc> " }; Assert.IsTrue(qm.SubmitRequest(item, null, true), qm.ErrorMessage); }
public void GetNextQueueMessageItemWithoutAddedItemTest() { // allow rolling back using (var scope = new TransactionScope()) { using (var manager = new QueueMessageManagerSql()) { // delete all pending requests int res = manager.Db.ExecuteNonQuery("delete from queuemessageItems where IsNull(started,'') = '' or started < '01/01/2000'"); Console.WriteLine(res); var item = manager.GetNextQueueMessage(); Assert.IsNull(item); // Error Message should be: No queue messages pending Console.WriteLine(manager.ErrorMessage); } } }
/// <summary> /// Gets the intial set of messages to be displayed by the QueueManager /// </summary> public void GetInitialMessages(string queueName = null) { if (string.IsNullOrEmpty(queueName)) { queueName = null; } var queue = new QueueMessageManagerSql(); List <QueueMessageItem> msgs = queue.GetRecentQueueItems(queueName, 10).Reverse().ToList(); if (msgs.Count < 1) { if (!string.IsNullOrEmpty(queue.ErrorMessage)) { throw new ApplicationException("Message retrieval failed: " + queue.ErrorMessage); } // no msgs = just clear the list Clients.All.ClearMessages(); } foreach (var msg in msgs) { int elapsed = 0; DateTime time = DateTime.UtcNow; if (msg.Completed != null) { if (msg.Started != null) { elapsed = (int)(msg.Completed.Value - msg.Started.Value).TotalMilliseconds; } time = msg.Completed.Value; } else if (msg.Started != null) { time = msg.Started.Value; } WriteMessage(msg, elapsed, -1, time); } }
void ProcessGetNextItem() { while (!CancelProcessing) { var manager = new QueueMessageManagerSql(); var item = manager.GetNextQueueMessage("Queue1"); if (item != null) { lock (GetNextItemLock) { IdList.Add(item.Id); } } else { IdErrors.Add(manager.ErrorMessage); } Thread.Yield(); } }
public void LoadRequestWithPropertiesTest() { var manager = new QueueMessageManagerSql(); var db = manager.Db; var item = db.Find <QueueMessageItem>("select TOP 1 * from queueMessageItems where IsComplete = 0 and XmlProperties is not null"); // no pending items - nothing to do if (item == null) { Console.WriteLine("No pending items... nothing to do."); return; } string reqId = item.Id; // clear out item item = null; // load through manager item = manager.Load(reqId); Assert.IsNotNull(item, manager.ErrorMessage); item.Message = "Updated @ " + DateTime.Now.ToString("t"); item.PercentComplete = 10; // Update Properties object t = manager.GetProperty("Time"); DateTime?time3 = t as DateTime?; Assert.IsNotNull(t, "Time Property is null and shouldn't be."); Assert.IsTrue(manager.Save(), manager.ErrorMessage); Console.WriteLine(item.XmlProperties); }
public void AddManyQueueItems() { var qm = new QueueMessageManagerSql(connectionString); for (int i = 0; i < 10; i++) { var item2 = new QueueMessageItem() { Message = "Sql Queue Entry", TextInput = "Process This", QueueName = "MPWF", Action = "GOBIG", Xml = string.Format(@"<doc> <company>East Wind</company> <name>Rick</name> <time>{0}</time> </doc> ",DateTime.Now.ToString("MMM dd - HH:mm:ss")) }; Thread.Sleep(300); Assert.IsTrue(qm.SubmitRequest(item2, null, true), qm.ErrorMessage); } }
/// <summary> /// Gets the intial set of messages to be displayed by the QueueManager /// </summary> public void GetInitialMessages(string queueName = null) { if (string.IsNullOrEmpty(queueName)) queueName = null; var queue = new QueueMessageManagerSql(); List<QueueMessageItem> msgs = queue.GetRecentQueueItems(queueName, 10).Reverse().ToList(); if ( msgs.Count < 1) { if (!string.IsNullOrEmpty(queue.ErrorMessage)) throw new ApplicationException("Message retrieval failed: " + queue.ErrorMessage); // no msgs = just clear the list Clients.All.ClearMessages(); } foreach (var msg in msgs) { int elapsed = 0; DateTime time = DateTime.UtcNow; if (msg.Completed != null) { if (msg.Started != null) elapsed = (int) (msg.Completed.Value - msg.Started.Value).TotalMilliseconds; time = msg.Completed.Value; } else if (msg.Started != null) { time = msg.Started.Value; } WriteMessage(msg, elapsed, -1, time); } }
public void SubmitRequestsToQueueTest() { var manager = new QueueMessageManagerSql(); int queueCount = 30; bool res = true; for (int i = 0; i < queueCount; i++) { var msg = new QueueMessageItem() { QueueName = "MPWF", Message = "Xml Message #" + i + " @ " + DateTime.Now.ToString("t"), Action = "NEWXMLORDER" }; if (!manager.SubmitRequest(msg)) Console.WriteLine(manager.ErrorMessage); res = manager.Save(msg); if (!res) break; } }
public void AddManyQueueItems() { var qm = new QueueMessageManagerSql(connectionString); for (int i = 0; i < 10; i++) { var item2 = new QueueMessageItem() { Message = "Sql Queue Entry", TextInput = "Process This", QueueName = "MPWF", Action = "GOBIG", Xml = string.Format(@"<doc> <company>East Wind</company> <name>Rick</name> <time>{0}</time> </doc> ", DateTime.Now.ToString("MMM dd - HH:mm:ss")) }; Thread.Sleep(300); Assert.IsTrue(qm.SubmitRequest(item2, null, true), qm.ErrorMessage); } }
public void GetNextQueueMessageItemWithAddedItemTest() { using (var manager = new QueueMessageManagerSql()) { // delete all pending requests int res = manager.Db.ExecuteNonQuery("delete from queuemessageItems where IsNull(started,'') = '' or started < '01/01/2000'"); Console.WriteLine(res); manager.SubmitRequest(messageText: "Next Complete Test " + DateTime.Now.ToString("t")); Assert.IsTrue(manager.Save(), manager.ErrorMessage); } using (var manager = new QueueMessageManagerSql()) { var item = manager.GetNextQueueMessage(); Assert.IsNotNull(item, manager.ErrorMessage); Console.WriteLine(item.Message); manager.CompleteRequest(item, "Next Complete complete " + DateTime.Now.ToString("t")); Assert.IsTrue(manager.Save(), manager.ErrorMessage); } }
void ProcessGetNextItem() { while (!CancelProcessing) { var manager = new QueueMessageManagerSql(); var item = manager.GetNextQueueMessage("Queue1"); if (item != null) lock (GetNextItemLock) { IdList.Add(item.Id); } else IdErrors.Add(manager.ErrorMessage); Thread.Yield(); } }
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); }
public void ClearTimedoutMessages() { var manager = new QueueMessageManagerSql(); Assert.IsTrue(manager.ClearMessages(), manager.ErrorMessage); }
public void CompleteMessageTest() { this.SubmitRequestWithPropertiesTest(); var manager = new QueueMessageManagerSql(); var item = new QueueMessageItem() { TextInput = "My input", Message = "Getting started." }; manager.CreateItem(item); manager.Properties["Time"] = DateTime.Now; Assert.IsTrue(manager.Save(),manager.ErrorMessage); string reqId = item.Id; manager = new QueueMessageManagerSql(); item = manager.GetNextQueueMessage(); DateTime? time = manager.GetProperty("Time") as DateTime?; Assert.IsNotNull(time); manager.CompleteRequest(item,"Message completed @" + DateTime.Now.ToString("t")); Assert.IsTrue(manager.Save(), manager.ErrorMessage); }
public void LoadRequestWithPropertiesTest() { var manager = new QueueMessageManagerSql(); var db = manager.Db; var item = db.Find<QueueMessageItem>("select TOP 1 * from queueMessageItems where IsComplete = 0 and XmlProperties is not null"); // no pending items - nothing to do if (item == null) { Console.WriteLine("No pending items... nothing to do."); return; } string reqId = item.Id; // clear out item item = null; // load through manager item = manager.Load(reqId); Assert.IsNotNull(item, manager.ErrorMessage); item.Message = "Updated @ " + DateTime.Now.ToString("t"); item.PercentComplete = 10; // Update Properties object t = manager.GetProperty("Time"); DateTime? time3 = t as DateTime?; Assert.IsNotNull(t, "Time Property is null and shouldn't be."); Assert.IsTrue(manager.Save(), manager.ErrorMessage); Console.WriteLine(item.XmlProperties); }
public void LoadRequestTest() { var manager = new QueueMessageManagerSql(); var db = manager.Db; var item = db.Find<QueueMessageItem>("select TOP 1 * from queueMessageItems where IsComplete = 0"); // no pending items - nothing to do if (item == null) { Console.WriteLine("No pending items... nothing to do."); return; } string reqId = item.Id; // clear out item item = null; // load through manager item = manager.Load(reqId); Assert.IsNotNull(item, manager.ErrorMessage); item.Message = "Updated @ " + DateTime.Now.ToString("t"); item.PercentComplete = 10; Assert.IsTrue(manager.Save(), manager.ErrorMessage); }
public void ScaleRetrievalTest() { var manager = new QueueMessageManagerSql(); manager.Db.ExecuteNonQuery("delete from queuemessageitems"); var sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 30000; i++) { string imageId = "10"; // Create a message object // item contains many properties for pushing // values back and forth as well as a few message fields var item = manager.CreateItem(); item.QueueName = "Queue1"; item.TextInput = DataUtils.GenerateUniqueId(15); // Set the message status and timestamps as submitted manager.SubmitRequest(item, autoSave: true); } Console.WriteLine("Insert time: " + sw.ElapsedMilliseconds); IdList = new List <string>(); IdErrors = new List <string>(); for (int i = 0; i < 20; i++) { var thread = new Thread(ProcessGetNextItem); thread.Start(); } for (int i = 0; i < 10000; i++) { if (CancelProcessing) { break; } string imageId = "10"; // Create a message object // item contains many properties for pushing // values back and forth as well as a few message fields var item = manager.CreateItem(); item.QueueName = "Queue1"; item.TextInput = DataUtils.GenerateUniqueId(15); // Set the message status and timestamps as submitted manager.SubmitRequest(item, autoSave: true); Thread.Sleep(2); } Console.WriteLine("Waiting for 5 seconds"); Thread.Sleep(5000); CancelProcessing = true; Thread.Sleep(100); Console.WriteLine("Done"); Console.WriteLine("Items processed: " + IdList.Count); var grouped = IdList.GroupBy(s => s); Console.WriteLine("Unique Count: " + grouped.Count()); foreach (var error in IdErrors) { Console.WriteLine(" " + error); } }
/// <summary> /// Returns a count of messages that is waiting for a given queue or /// all queues /// </summary> /// <param name="queueName"></param> public void GetWaitingQueueMessageCount(string queueName = null) { if (string.IsNullOrEmpty(queueName)) queueName = null; // force all using (var manager = new QueueMessageManagerSql()) { int count = manager.GetWaitingQueueMessageCount(queueName); // broadcast to all clients Clients.All.getWaitingQueueMessageCountCallback(count); } }
public void CreateDataBaseTest() { var manager = new QueueMessageManagerSql(); Assert.IsTrue(manager.CreateDatastore(), manager.ErrorMessage); }
public void CreateDataBaseTest() { var manager = new QueueMessageManagerSql(); Assert.IsTrue(manager.CreateDatastore(),manager.ErrorMessage); }
public void ScaleRetrievalTest() { var manager = new QueueMessageManagerSql(); manager.Db.ExecuteNonQuery("delete from queuemessageitems"); var sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 30000; i++) { string imageId = "10"; // Create a message object // item contains many properties for pushing // values back and forth as well as a few message fields var item = manager.CreateItem(); item.QueueName = "Queue1"; item.TextInput = DataUtils.GenerateUniqueId(15); // Set the message status and timestamps as submitted manager.SubmitRequest(item,autoSave: true); } Console.WriteLine("Insert time: " + sw.ElapsedMilliseconds); IdList = new List<string>(); IdErrors = new List<string>(); for (int i = 0; i < 20; i++) { var thread = new Thread(ProcessGetNextItem); thread.Start(); } for (int i = 0; i < 10000; i++) { if (CancelProcessing) break; string imageId = "10"; // Create a message object // item contains many properties for pushing // values back and forth as well as a few message fields var item = manager.CreateItem(); item.QueueName = "Queue1"; item.TextInput = DataUtils.GenerateUniqueId(15); // Set the message status and timestamps as submitted manager.SubmitRequest(item, autoSave: true); Thread.Sleep(2); } Console.WriteLine("Waiting for 5 seconds"); Thread.Sleep(5000); CancelProcessing = true; Thread.Sleep(100); Console.WriteLine("Done"); Console.WriteLine("Items processed: " + IdList.Count); var grouped = IdList.GroupBy(s => s); Console.WriteLine("Unique Count: " + grouped.Count()); foreach (var error in IdErrors) Console.WriteLine(" " + error); }
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); }