发送消息 - 每小时、每天、每周安排
Sending message - Schedule hourly, daily, weekly
我需要一些逻辑方面的帮助。
我有一个发送短信的应用程序。要发送的短信由用户插入(.NET MVC 应用程序),数据库中有一个 table。
Table 输出短信:
- Id(身份)
- 接收器(字符串)
- 消息(字符串)
- DateTime2Send(日期时间)
- 已发送(布尔值)
我预定的应用程序是一个 Windows 服务(使用 Topshelf),它每 10 秒检查一次 table 的新行 WHERE 字段 Sent 是不为真且 DateTime.Now-DateTime2Send=<0,并发送。
对于用户直接插入 table.
的消息,一切都会被找到
现在我需要实施按时间间隔发送 SMS 的时间表 - 每 30 分钟、每天、每周、每月。
为此,我创建了一个 table SMSschedule:
- Id(身份)
- 接收器(字符串)
- ScheduleTypeId(int, FKey, values 30 minutes, Daily, Weekly, monthly)
- Date2Send (int)
- Time2Send(日期时间)
- 消息(字符串)
每个接收者可能有 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 这样的调度程序,它会为您做所有的家务并在指定的时间间隔内完成工作(即:为您发送短信)
我需要一些逻辑方面的帮助。 我有一个发送短信的应用程序。要发送的短信由用户插入(.NET MVC 应用程序),数据库中有一个 table。
Table 输出短信:
- Id(身份)
- 接收器(字符串)
- 消息(字符串)
- DateTime2Send(日期时间)
- 已发送(布尔值)
我预定的应用程序是一个 Windows 服务(使用 Topshelf),它每 10 秒检查一次 table 的新行 WHERE 字段 Sent 是不为真且 DateTime.Now-DateTime2Send=<0,并发送。 对于用户直接插入 table.
的消息,一切都会被找到现在我需要实施按时间间隔发送 SMS 的时间表 - 每 30 分钟、每天、每周、每月。 为此,我创建了一个 table SMSschedule:
- Id(身份)
- 接收器(字符串)
- ScheduleTypeId(int, FKey, values 30 minutes, Daily, Weekly, monthly)
- Date2Send (int)
- Time2Send(日期时间)
- 消息(字符串)
每个接收者可能有 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 这样的调度程序,它会为您做所有的家务并在指定的时间间隔内完成工作(即:为您发送短信)