public bool AddTaskQueue(string queueName, string[] values)
        {
            try
            {
                Log.Info(string.Format("LtTaskQueue.AddTaskQueue,count:{0}", values.Count()));
                ConcurrentBag <TaskQueue> list = new ConcurrentBag <TaskQueue>();
                Parallel.ForEach(values, value =>
                                 //foreach ( string value in values)
                {
                    TaskQueue t = new TaskQueue()
                    {
                        QueueName     = queueName,
                        Value         = value,
                        CreatedOn     = DateTime.Now,
                        LastUpdatedOn = DateTime.Now,
                        Status        = 0,
                    };
                    list.Add(t);
                });
                Log.Info(string.Format("LtTaskQueue.AddTaskQueue.list ConcurrentBag<TaskQueue>,count:{0}", list.Count()));
                using (var db = new MQS_DBEntities())
                {
                    BulkInsert(db.Database.Connection.ConnectionString, "TaskQueues", list.ToList());
                }

                WaitHandle.Set();

                return(true);
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
                return(false);
            }
        }
示例#2
0
        private static bool BeforEnqueue(IQueueMini queueMini, object value)
        {
            TaskQueue taskQueue = value as TaskQueue;

            if (taskQueue == null)
            {
                throw new Exception("转化为TaskQueue实体失败");
            }

            using (var db = new MQS_DBEntities())
            {
                db.Configuration.AutoDetectChangesEnabled = false;
                db.Configuration.ValidateOnSaveEnabled    = false;

                string sql;

                if (Initialized)
                {
                    sql = string.Format("update dbo.TaskQueues set status=1 where status=0 and taskQueueId={0}", taskQueue.TaskQueueId);
                }
                else
                {
                    sql = string.Format("update dbo.TaskQueues set status=1 where taskQueueId={0}", taskQueue.TaskQueueId);
                }

                int successCount = db.Database.ExecuteSqlCommand(sql);

                if (successCount == 0)
                {
                    throw new Exception("入队失败,数据库找不到该id:" + taskQueue.TaskQueueId);
                }
            }
            return(true);
        }
示例#3
0
        private TaskQueue GetLastTaskQueue()
        {
            using (var db = new MQS_DBEntities())
            {
                var taskQueue = (from t in db.TaskQueues orderby t.CreatedOn descending select t).FirstOrDefault();

                return(taskQueue);
            }
        }
示例#4
0
        /// <summary>
        /// 初始化
        /// </summary>
        private static void Initialize()
        {
            using (var db = new MQS_DBEntities())
            {
                var list = (from t in db.TaskQueues where t.Status == 1 orderby t.CreatedOn select t).ToList();

                list.ForEach(t => EnqueueStatic(t.QueueName, JsonConvert.SerializeObject(t)));
            }

            Initialized = true;
        }
示例#5
0
        private static List <TaskQueue> GetNeedEnqueue()
        {
            using (var db = new MQS_DBEntities())
            {
                db.Configuration.LazyLoadingEnabled       = false;
                db.Configuration.AutoDetectChangesEnabled = false;
                db.Configuration.ValidateOnSaveEnabled    = false;

                var list = (from t in db.TaskQueues where t.Status == 0 orderby t.CreatedOn select t).Take(200).ToList();

                return(list);
            }
        }
示例#6
0
        private static void AfterDequeue(IQueueMini queueMini, object value)
        {
            try
            {
                if (value == null)
                {
                    throw new Exception("出队内容为null");
                }

                TaskQueue taskQueue = value as TaskQueue;

                if (taskQueue == null)
                {
                    throw new Exception("出队时转化为TaskQueue实体失败");
                }

                using (var db = new MQS_DBEntities())
                {
                    db.Configuration.AutoDetectChangesEnabled = false;
                    db.Configuration.ValidateOnSaveEnabled    = false;

                    int successCount = db.Database.ExecuteSqlCommand(string.Format("update dbo.TaskQueues  set status=2  where taskQueueId={0}", taskQueue.TaskQueueId));

                    if (successCount == 0)
                    {
                        throw new Exception("出队失败,数据库找不到该id:" + taskQueue.TaskQueueId);
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);

                if (value != null)
                {
                    bool reTrySuccess = Convert.ToBoolean(EnqueueStatic(queueMini.Name, value.ToString()).Value);

                    if (!reTrySuccess)
                    {
                        Log.Error("尝试重复入队失败");
                    }
                }
            }
        }