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;
        }
Example #3
0
        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);
        }
Example #4
0
        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 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);
        }
Example #7
0
        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;
                }
            }
        }
Example #8
0
        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;
        }
Example #10
0
        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);
        }
Example #11
0
        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 CreateQmmTableTest()
        {
            var qm = new QueueMessageManagerSql(connectionString);

            Assert.IsNotNull(qm);

            Assert.IsTrue(qm.CreateDatastore(), qm.ErrorMessage);
        }
Example #14
0
 public void GetWaitingQueueMessageCount()
 {
     using (var manager = new QueueMessageManagerSql())
     {
         int count = manager.GetWaitingQueueMessageCount(GlobalService.Controller.QueueName);
         // broadcast to all clients
         Clients.All.getWaitingQueueMessageCountCallback(count);
     }
 }
Example #15
0
        public void GetWaitingMessagesCountTest()
        {
            var manager = new QueueMessageManagerSql();

            int count = manager.GetWaitingQueueMessageCount();

            Assert.IsNotNull(count > -1);

            Console.WriteLine(count + " queued items waiting.");
        }
Example #16
0
 public void GetRecentMessagesTest()
 {
     using (var manager = new QueueMessageManagerSql())
     {
         var items = manager.GetRecentQueueItems();
         foreach (var item in items)
         {
             Console.WriteLine(item.Id + " " + item.Message);
         }
     }
 }
Example #17
0
        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");
        }
Example #19
0
        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");
        }
Example #20
0
        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);
            }
        }
Example #21
0
        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);
            }
        }
Example #22
0
 /// <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);
        }
Example #25
0
        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);
            }
        }
Example #26
0
        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);
        }
Example #29
0
        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);
                }
            }
        }
Example #30
0
        /// <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);
            }
        }
Example #31
0
        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();
            }
        }
Example #32
0
        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);
            }
        }
Example #37
0
        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);
            }
        }
        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);
        }
 public void GetRecentMessagesTest()
 {
     using (var manager = new QueueMessageManagerSql())
     {
         var items = manager.GetRecentQueueItems();
         foreach (var item in items)
         {
             Console.WriteLine(item.Id + " " + item.Message);
         }
     }          
 }
        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 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);
                }
            }
        }
        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 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);
            }
        }
        public void GetWaitingMessagesCountTest()
        {
            var manager = new QueueMessageManagerSql();

            int count = manager.GetWaitingQueueMessageCount();

            Assert.IsNotNull(count > -1);

            Console.WriteLine(count + " queued items waiting.");
        }
        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 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);            
        }
Example #51
0
        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);
            }
        }
Example #53
0
        public void CreateDataBaseTest()
        {
            var manager = new QueueMessageManagerSql();

            Assert.IsTrue(manager.CreateDatastore(), manager.ErrorMessage);
        }
        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 CreateDataBaseTest()
 {
     var manager = new QueueMessageManagerSql();            
     Assert.IsTrue(manager.CreateDatastore(),manager.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);
            }
        }
 public void getQueueMessage(string id)
 {
     var queue = new QueueMessageManagerSql();
     var qitem = queue.Load(id);            
     Clients.Caller.getQueueMessageCallback(qitem);
 }
        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 GetWaitingQueueMessageCount()
 {
     using (var manager = new QueueMessageManagerSql())
     {
         int count = manager.GetWaitingQueueMessageCount(GlobalService.Controller.QueueName);
         // broadcast to all clients
         Clients.All.getWaitingQueueMessageCountCallback(count);
     }
 }
        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);
        }