示例#1
0
        /// <summary>Creates Message Queuing queue by specified properties.</summary>
        /// <param name="prop">The queue properties. </param>
        /// <returns>A <see cref="T:Nistec.Messaging.MQueue"></see> that represents the new queue.</returns>
        public MQueue AddQueue(IQProperties prop)
        {
            //prop.IsValid(lockKey);

            if (MQ.ContainsKey(prop.QueueName))
            {
                //if (prop.ReloadOnStart)
                //{
                //    MQueue q = new MQueue(prop);
                //    MQ[prop.QueueName] = q;
                //    return q;
                //}
                return((MQueue)MQ[prop.QueueName]);
            }
            //if (prop.IsDbQueue)
            //{
            //    AddDbQueue(prop.QueueName, prop.IsTrans);
            //}

            MQueue queue = new MQueue(prop);

            //LoadQueue(queue,prop);
            MQ[prop.QueueName] = queue;

            Logger.Info("AddQueue : {0}", prop.QueueName);

            return(queue);
        }
示例#2
0
        public PriorityPersistQueue(IQProperties qp)
            : base(qp.QueueName)
        {
            DbLiteSettings settings = new DbLiteSettings()
            {
                Name       = qp.QueueName,
                CommitMode = (CommitMode)(int)qp.CommitMode,
                DbPath     = AgentManager.Settings.QueuesPath
            };

            //settings.SetFast();
            m_db = new PersistentBinary <IQueueItem>(settings);
            //m_db = new PersistentDictionary(settings);
            m_db.BeginLoading   += M_db_BeginLoading;
            m_db.LoadCompleted  += M_db_LoadCompleted;
            m_db.ErrorOcurred   += M_db_ErrorOcurred;
            m_db.ClearCompleted += M_db_ClearCompleted;
            //m_db.ItemChanged += M_db_ItemChanged;

            m_db.ItemLoaded = (item) => {
                this.ReEnqueue(item);
            };

            if (qp.ReloadOnStart)
            {
                Logger.Info("PriorityPersistQueue will load items to : {0}", qp.QueueName);
            }
            else
            {
                Logger.Info("PriorityPersistQueue will clear all items from : {0}", qp.QueueName);
            }

            m_db.ReloadOrClearPersist(qp.ReloadOnStart);
        }
示例#3
0
        public PriorityFsQueue(IQProperties qp)
            : base(qp.QueueName)
        {
            int numProcs         = Environment.ProcessorCount;
            int concurrencyLevel = numProcs * 2;
            int initialCapacity  = 101;

            QueueList = new ConcurrentDictionary <Ptr, IQueueItem>(concurrencyLevel, initialCapacity);

            CommitMode = (CommitMode)(int)qp.CommitMode;
            CoverMode  = qp.Mode;

            if (CoverMode == CoverMode.FileStream)
            {
                DbLiteSettings settings = new DbLiteSettings()
                {
                    Name       = qp.QueueName,
                    CommitMode = (CommitMode)(int)qp.CommitMode,
                    DbPath     = AgentManager.Settings.QueuesPath
                };
                //settings.SetFast();
                QueueHost queueHost = qp.GetRoutHost();
                m_fs = new FileMessage(queueHost);

                //m_db = new PersistentBinary<IQueueItem>(settings);
                ////m_db = new PersistentDictionary(settings);
                //m_db.BeginLoading += M_db_BeginLoading;
                //m_db.LoadCompleted += M_db_LoadCompleted;
                //m_db.ErrorOcurred += M_db_ErrorOcurred;
                //m_db.ClearCompleted += M_db_ClearCompleted;
                ////m_db.ItemChanged += M_db_ItemChanged;

                //m_db.ItemLoaded = (item) =>
                //{
                //    this.ReEnqueue(item);
                //};

                if (qp.ReloadOnStart)
                {
                    QLogger.InfoFormat("PriorityComplexQueue will load items to : {0}", qp.QueueName);
                }
                else
                {
                    QLogger.InfoFormat("PriorityComplexQueue will clear all items from : {0}", qp.QueueName);
                }

                //m_db.ReloadOrClearPersist(qp.ReloadOnStart);

                m_fs.ReloadItemsTo(0, (IQueueItem item) =>
                {
                    this.ReEnqueue(item);
                });
            }
        }
示例#4
0
        internal static PriorityQueue Factory(IQProperties prop)
        {
            switch (prop.Mode)
            {
            //case QueueMode.Transactional:
            //    return new PriorityTransQueue(prop.QueueName);
            //case CoverMode.Db:
            //    Assists.Exception_QueueDbNotSupported();
            //    return null;
            //case CoverMode.File:
            //    return new PriorityFileQueue(prop.QueueName);
            case CoverMode.Persistent:
                return(new PriorityPersistQueue(prop));

            case CoverMode.Memory:
            default:
                return(new PriorityMemQueue(prop.QueueName));
            }
        }
示例#5
0
        public PriorityPersistQueue(IQProperties qp)
            : base(qp.QueueName)
        {
            DbLiteSettings settings = new DbLiteSettings()
            {
                Name       = qp.QueueName,
                CommitMode = (CommitMode)(int)qp.CommitMode,
                DbPath     = AgentManager.Settings.QueuesPath
            };

            m_db = new PersistentQueue(settings);

            // AdapterProperties ap = new AdapterProperties()
            //{
            //    Source = new QueueHost(qp.QueueName, ".", qp.CoverPath, HostAddressTypes.db),
            //    OperationType = AdapterOperations.Sync,
            //    ProtocolType = AdapterProtocols.Db,
            //    ConnectTimeout = qp.ConnectTimeout
            //};
            //m_adapter = new DbAdapter(ap);
        }
示例#6
0
        public PersistQueue(IQProperties qp)
        {
            int numProcs         = Environment.ProcessorCount;
            int concurrencyLevel = numProcs * 2;
            int initialCapacity  = 101;

            DbLiteSettings settings = new DbLiteSettings()
            {
                Name       = qp.QueueName,
                CommitMode = (CommitMode)(int)qp.CommitMode,
                DbPath     = AgentManager.Settings.QueuesPath
            };

            //settings.SetFast();
            m_db = new PersistentBinary <IQueueItem>(settings);
            //m_db = new PersistentDictionary(settings);
            m_db.BeginLoading   += M_db_BeginLoading;
            m_db.LoadCompleted  += M_db_LoadCompleted;
            m_db.ErrorOcurred   += M_db_ErrorOcurred;
            m_db.ClearCompleted += M_db_ClearCompleted;
            //m_db.ItemChanged += M_db_ItemChanged;

            m_db.ItemLoaded = (item) =>
            {
                this.ReEnqueue(item);
            };

            if (qp.ReloadOnStart)
            {
                QLogger.InfoFormat("PersistQueue will load items to : {0}", qp.QueueName);
            }
            else
            {
                QLogger.InfoFormat("PersistQueue will clear all items from : {0}", qp.QueueName);
            }

            m_db.ReloadOrClearPersist(qp.ReloadOnStart);
        }
示例#7
0
        /// <summary>
        /// MQueue Ctor
        /// </summary>
        /// <param name="mqp"></param>
        public MQueue(IQProperties prop)
        {
            Logger = QLogger.Logger.ILog;

            Console.WriteLine("Init MQueue " + prop);

            LogActionInfo("MQueue ctor", "Init MQueue " + prop.Print());

            TimeStarted = DateTime.Now;
            LOCK();

            m_enabled = true;

            //m_Server = prop.Server;
            m_QueueName = prop.QueueName;
            m_CoverMode = prop.Mode;
            m_maxRetry  = prop.MaxRetry;
            m_isTrans   = prop.IsTrans;
            IsTopic     = prop.IsTopic;
            TargetPath  = prop.TargetPath;

            RoutHost = prop.GetRoutHost();
            if (IsCoverable)
            {
                //_QCover = new QCover()
                //{
                //    ConnectTimeout = prop.ConnectTimeout,
                //    CoverProvider = IsDbQueue ? CoverProviders.Db : CoverProviders.File,
                //    CoverPath = prop.CoverPath
                //};
                m_QueuesPath = AgentManager.Settings.QueuesPath;
            }
            if (IsTopic)
            {
                Topic = new TopicController(this);
            }

            resetEvent = new ManualResetEvent(false);

            m_Perfmon = new QueuePerformanceCounter(this, QueueAgentType.MQueue, m_QueueName);


            //Q = prop.Factory();
            Q        = new PriorityComplexQueue(prop);
            Q.Logger = Logger;

            Q.MessageArrived   += new QueueItemEventHandler(Q_MessageArrived);
            Q.MessageReceived  += new QueueItemEventHandler(Q_MessageReceived);
            Q.TransactionBegin += new QueueItemEventHandler(Q_MessageTransBegin);
            Q.TransactionEnd   += new QueueItemEventHandler(Q_MessageTransEnd);
            Q.ErrorOccured     += new QueueItemEventHandler(Q_ErrorOccured);
            //InitRecoverQueue(DefaultIntervalMinuteRecover);

            if (prop.ReloadOnStart)
            {
                Q.ReloadItemsInternal();
            }

            UNLOCK();
            //if (recoverable)
            //{
            //    InitRecoverQueue(DefaultIntervalMinuteRecover);
            //}
            //else
            //{
            //    UNLOCK();
            //}
        }