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