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