Beispiel #1
0
        void watchQueueCallback(IAsyncResult ar)
        {
            // Retrieve the delegate.
            watchQueueDelegate dlgt = (watchQueueDelegate)ar.AsyncState;

            // Call EndInvoke to retrieve the results.
            dlgt.EndInvoke(ar);
        }
        public void Start()
        {
            try
            {
                string queueSizeCheckMilliseconds = ConfigurationManager.AppSettings["QueueSizeCheckIntervalInMilliseconds"];
                _keepTabsOnQueueSizeCounter =
                    new System.Timers.Timer((queueSizeCheckMilliseconds == null) ? _queueSizeCheckMilliseconds : Convert.ToInt32(queueSizeCheckMilliseconds));
                _keepTabsOnQueueSizeCounter.Start();

                //you’ll want to use a MessageReadPropertyFilter in order to basically filter out all the data to keep the foot print small.
                _countFilter.AdministrationQueue = false;
                _countFilter.ArrivedTime         = false;
                _countFilter.CorrelationId       = false;
                _countFilter.Priority            = false;
                _countFilter.ResponseQueue       = false;
                _countFilter.SentTime            = false;
                _countFilter.Body  = false;
                _countFilter.Label = false;
                _countFilter.Id    = false;

                _keepTabsOnQueueSizeCounter.Elapsed += new System.Timers.ElapsedEventHandler(_keepTabsOnQueueSizeCounter_Elapsed);

                string minThreads = ConfigurationManager.AppSettings["MinThreads"];
                string maxThreads = ConfigurationManager.AppSettings["MaxThreads"];

                //don't forget to start the threadpool...
                _tp.MinThreads = minThreads == null ? _minThreads : Convert.ToInt32(minThreads);
                _tp.MaxThreads = maxThreads == null ? _maxThreads : Convert.ToInt32(maxThreads);

                _tp.Start();

                string messageQueueSetting = ConfigurationManager.AppSettings["queueName"];
                _queueName = messageQueueSetting == null ? null : messageQueueSetting;

                if (_queueName == null)
                {
                    throw new ApplicationException("No valid queueName setting in the Configuration File");
                }

                // Create a transaction queue using System.Messaging API
                if (!MessageQueue.Exists(_queueName))
                {
                    MessageQueue.Create(_queueName, true);
                }

                //Connect to the queue
                MessageQueue Queue = new MessageQueue(_queueName);

                System.Messaging.MessageQueue.EnableConnectionCache = false;
                watchQueueDelegate dlgt = new watchQueueDelegate(watchQueue);
                IAsyncResult       ar   = dlgt.BeginInvoke(_queueName, new AsyncCallback(watchQueueCallback), dlgt);
                _log.Debug("AuditMSMQProcessingService is running");
            }
            catch (Exception ex)
            {
                _log.Fatal(ex);
            }
        }