Пример #1
0
        public Int32 Produce(ProduceModel model)
        {
            var messages = model?.Messages?.Distinct().ToArray();

            if (messages == null || messages.Length == 0)
            {
                return(0);
            }

            var app = _App;

            // 去重过滤
            if (model.Unique)
            {
                messages = AppMessage.Filter(app.ID, model.Topic, messages);
                if (messages.Length == 0)
                {
                    return(0);
                }
            }

            var ms = new List <AppMessage>();

            var total = 0;
            var now   = DateTime.Now;
            // 延迟需要基于任务开始时间,而不能用使用当前时间,防止回头跑数据时无法快速执行
            var dTime = now.AddSeconds(model.DelayTime);

            var jb   = Job.FindByAppIDAndName(app.ID, model.Job);
            var snow = AppMessage.Meta.Factory.Snow;

            foreach (var item in messages)
            {
                var jm = new AppMessage
                {
                    Id    = snow.NewId(),
                    AppID = app.ID,
                    JobID = jb == null ? 0 : jb.ID,
                    Topic = model.Topic,
                    Data  = item,
                };

                jm.CreateTime = jm.UpdateTime = now;

                // 雪花Id直接指定消息在未来的消费时间
                if (model.DelayTime > 0)
                {
                    jm.Id         = snow.NewId(dTime);
                    jm.UpdateTime = dTime;
                }

                ms.Add(jm);
            }

            // 记录消息积压数
            total = ms.BatchInsert();

            // 增加消息数
            if (total < 0)
            {
                total = messages.Length;
            }
            if (total > 0)
            {
                var job2 = app.Jobs?.FirstOrDefault(e => e.Topic == model.Topic);
                if (job2 != null)
                {
                    job2.MessageCount += total;
                    job2.SaveAsync();
                }

                app.MessageCount += total;
                app.SaveAsync();
            }

            return(total);
        }
Пример #2
0
        public Int32 Produce(String job, String topic, String[] messages, Int32 delayTime = 0, Boolean unique = false)
        {
            if (messages == null)
            {
                return(0);
            }
            messages = messages.Distinct().ToArray();
            if (messages.Length == 0)
            {
                return(0);
            }

            var app = Session["App"] as App;

            // 去重过滤
            if (unique)
            {
                messages = AppMessage.Filter(app.ID, topic, messages);
                if (messages.Length == 0)
                {
                    return(0);
                }
            }

            var ms = new List <AppMessage>();

            var total = 0;
            var now   = DateTime.Now;
            // 延迟需要基于任务开始时间,而不能用使用当前时间,防止回头跑数据时无法快速执行
            var dTime = delayTime.ToDateTime();

            if (dTime.Year < 2000)
            {
                dTime = now.AddSeconds(delayTime);
            }

            var jb = Job.FindByAppIDAndName(app.ID, job);

            foreach (var item in messages)
            {
                var jm = new AppMessage
                {
                    AppID = app.ID,
                    JobID = jb == null ? 0 : jb.ID,
                    Topic = topic,
                    Data  = item,
                };

                jm.CreateTime = jm.UpdateTime = now;
                if (delayTime > 0)
                {
                    jm.UpdateTime = dTime;
                }

                ms.Add(jm);
            }

            // 记录消息积压数
            total = ms.BatchInsert();

            // 增加消息数
            if (total < 0)
            {
                total = messages.Length;
            }
            if (total > 0)
            {
                var job2 = app.Jobs?.FirstOrDefault(e => e.Topic == topic);
                if (job2 != null)
                {
                    job2.MessageCount += total;
                    job2.SaveAsync();
                }

                app.MessageCount += total;
                app.SaveAsync();
            }

            return(total);
        }
Пример #3
0
        public Int32 Produce(Int32 jobitemid, String topic, String[] messages, Int32 delayTime = 0, Boolean unique = false)
        {
            if (messages == null)
            {
                return(0);
            }
            messages = messages.Distinct().ToArray();
            if (messages.Length == 0)
            {
                return(0);
            }

            var app = Session["App"] as App;

            var ji  = JobLog.FindByID(jobitemid);
            var job = ji?.Job;

            //if (job == null) throw new Exception($"无效作业编号[jobIten={jobitemid}]无效");

            // 去重过滤
            if (unique)
            {
                messages = AppMessage.Filter(app.ID, topic, messages);
                if (messages.Length == 0)
                {
                    return(0);
                }
            }

            var ms = new List <AppMessage>();

            var total = 0;
            var now   = DateTime.Now;
            // 延迟需要基于任务开始时间,而不能用使用当前时间,防止回头跑数据时无法快速执行
            var dTime = delayTime.ToDateTime();

            if (ji != null)
            {
                dTime = ji.Start.AddSeconds(delayTime);
            }
            else if (dTime.Year < 2000)
            {
                dTime = now.AddSeconds(delayTime);
            }

            foreach (var item in messages)
            {
                var jm = new AppMessage
                {
                    AppID = app.ID,
                    //JobID = job.ID,
                    Topic = topic,
                    Data  = item,
                };
                if (job != null)
                {
                    jm.JobID = job.ID;
                }

                jm.CreateTime = jm.UpdateTime = now;
                if (delayTime > 0)
                {
                    jm.UpdateTime = dTime;
                }

                ms.Add(jm);
            }

            // 记录消息积压数
            total = ms.BatchInsert();

            // 增加消息数
            if (total < 0)
            {
                total = messages.Length;
            }
            if (total > 0)
            {
                var job2 = app.Jobs?.FirstOrDefault(e => e.Topic == topic);
                if (job2 != null)
                {
                    job2.MessageCount += total;
                    job2.SaveAsync();
                }

                app.MessageCount += total;
                app.SaveAsync();
            }

            return(total);
        }