发送消息 - 每小时,每天,每周安排

时间:2015-06-24 02:32:12

标签: c# postgresql scheduled-tasks quartz.net

我需要一些逻辑上的帮助。 我有一个发送短信的应用程序。要发送的SMS由用户插入(.NET MVC应用程序),DB中有一个表。

表输出SMS:

  • Id(身份)
  • 接收者(字符串)
  • 消息(字符串)
  • DateTime2Send(DateTime)
  • 已发送(bool)

我的预定应用是Windows服务(使用Topshelf),它每10秒检查一次表新行WHERE字段已发送不是TRUE而DateTime.Now-DateTime2Send =< 0,并发送。 找到用户直接插入表格的消息。

现在我需要实施按时间间隔发送短信的时间表 - 每30分钟,每日,每周,每月。 为此我创建了一个表SMSschedule:

  • Id(身份)
  • 接收者(字符串)
  • ScheduleTypeId(int,FKey,值30分钟,每日,每周,每月)
  • Date2Send(int)
  • Time2Send(DateTime)
  • 消息(字符串)

每个接收者可能会安排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。

1 个答案:

答案 0 :(得分:1)

从我认为你应该将实现细节移动到代码中,可能会创建3或4个函数来扫描表" OutPut"。每个函数都有一个特定的时间间隔来扫描。现在你在每个函数中的逻辑现在将类似WHERE字段Sent不是TRUE而DateTime.Now-DateTime2Send =< 0和Time2Send< =' time_to_send'。

或者为什么不使用像hangfire这样的调度程序,它将为您完成所有内容管理并在指定的时间间隔内完成工作(即:发送短信给你)