【问题标题】:Sending message - Schedule hourly, daily, weekly发送消息 - 每小时、每天、每周安排
【发布时间】:2015-09-10 01:40:57
【问题描述】:

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

表格输出短信:

  • Id(身份)
  • 接收方(字符串)
  • 消息(字符串)
  • DateTime2Send(日期时间)
  • 已发送(布尔型)

我的计划应用程序是 Windows 服务(使用 Topshelf),它每 10 秒检查一次表中的新行 WHERE 字段 Sent 不是 TRUE 且 DateTime.Now-DateTime2Send=

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

  • Id(身份)
  • 接收方(字符串)
  • ScheduleTypeId(int, FKey, values 30 minutes, Daily, Weekly,monthly)
  • Date2Send (int)
  • Time2Send(日期时间)
  • 消息(字符串)

可能有 1+ 条消息计划发送给每个接收者。我想制定另一个计划,每 10 分钟(或 30 分钟)检查一次该表,并在第一个表 outputSMS 中创建数据(哦,我需要添加字段来识别用户计划或插入)。我想按这个间隔检查它,因为用户可以随时按时进行更改。 接收器的数量最多为 20k,每个接收器可能有多个时间表。

接收方 SMS_ScheduleType SMS_DateToSend SMS_DayOfWeekToSend SMS_TimeToSend SMS_TextToSend Rec-1 每天 0 0 20:00 晚上 Rec-2 每天 0 0 6:00 早上 Rec-3 每小时 0 0 0 信息每小时 Rec-4 每周 0 3 15:30 每周测试 Rec-4 每月 23 0 10:00 每月测试

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 1.我不明白为什么要用不同的间隔制作 3-4 个函数?有 1 个间隔为 10 秒的功能而不是间隔高的 3-4 个不是更好吗? Hangfire 我会通读一遍,实际上我打算使用 Qartz.NET。
    • 对不起,我给你的问题一个错误的答案。我觉得你的逻辑很好。但基本上我要说的是,与其创建额外的表,不如创建一个每 30 分钟运行一次的方法(取决于您认为新消息的频率是多少)并检查新消息以及发送它的时间是否是现在或已经过去然后发送消息。现在,如果用户修改了发送时间,则将消息标记为未发送并(重新)发送。我认为不需要额外的桌子。
    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2020-12-15
    相关资源
    最近更新 更多