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

Sending message - Schedule hourly, daily, weekly

我需要一些逻辑方面的帮助。 我有一个发送短信的应用程序。要发送的短信由用户插入(.NET MVC 应用程序),数据库中有一个 table。

Table 输出短信:

我预定的应用程序是一个 Windows 服务(使用 Topshelf),它每 10 秒检查一次 table 的新行 WHERE 字段 Sent 是不为真且 DateTime.Now-DateTime2Send=<0,并发送。 对于用户直接插入 table.

的消息,一切都会被找到

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

每个接收者可能有 1+ 条消息。我想制定另一个计划,每 10(或 30)分钟检查一次 table,并在第一个 table 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

对于每小时,我是否应该再添加一个字段来设置发送时间?对于 Time2Send 字段,步长必须为 0.5 小时,即 30 分钟。 你有什么建议? DB是Postgres,可以转移到Oracle。

从外观上看,我认为您应该将实现细节移到代码中,也许创建 3 或 4 个扫描 table "OutPut" 的函数。每个函数都有一个特定的时间间隔来扫描。现在您在每个函数中的逻辑现在将类似于 WHERE field Sent is not TRUE and DateTime.Now-DateTime2Send=<0 and Time2Send <= 'time_to_send'.

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