我需要一些逻辑上的帮助。 我有一个发送短信的应用程序。要发送的SMS由用户插入(.NET MVC应用程序),DB中有一个表。
表输出SMS:
我的预定应用是Windows服务(使用Topshelf),它每10秒检查一次表新行WHERE字段已发送不是TRUE而DateTime.Now-DateTime2Send =< 0,并发送。 找到用户直接插入表格的消息。
现在我需要实施按时间间隔发送短信的时间表 - 每30分钟,每日,每周,每月。 为此我创建了一个表SMSschedule:
每个接收者可能会安排1条以上的消息。我想制定另一个计划,每隔10(或30)分钟检查一次该表,并在第一个表 outputSMS 中创建数据(哦,我需要添加字段来标识预定或用户插入)。我希望按此间隔检查它,因为用户可以随时按计划进行更改。 接收器的数量将是最大20k,并且对于每个接收器可以是几个时间表。
Receiver SMS_ScheduleType SMS_DateToSend SMS_DayOfWeekToSend SMS_TimeToSend SMS_TextToSend Rec-1 daily 0 0 20:00 Evening Rec-2 daily 0 0 6:00 Morning Rec-3 hourly 0 0 0 INFO hourly Rec-4 weekly 0 3 15:30 TEST weekly Rec-4 Monthly 23 0 10:00 TEST monthly
for Hourly我应该再添加一个字段来设置发送时间吗?对于Time2Send,字段步长必须为0.5小时,即30分钟。 你有什么建议? DB是Postgres,可以转移到Oracle。
答案 0 :(得分:1)
从我认为你应该将实现细节移动到代码中,可能会创建3或4个函数来扫描表" OutPut"。每个函数都有一个特定的时间间隔来扫描。现在你在每个函数中的逻辑现在将类似WHERE字段Sent不是TRUE而DateTime.Now-DateTime2Send =< 0和Time2Send< =' time_to_send'。
或者为什么不使用像hangfire这样的调度程序,它将为您完成所有内容管理并在指定的时间间隔内完成工作(即:发送短信给你)