我需要创建一个推送通知服务(我通过 SignalR/WebAPI 完成)和一个可以在某个日期/时间或某个重复间隔运行的 Future Task Runner / Scheduler。
用例的一个示例是付款提醒服务,如果在到期日之前仍未付款,系统将向“管理员”发送通知,并向“消费者”发送电子邮件/短信。可以手动或自动将提醒推迟到另一个日期或更新到新的日期线。
调度程序服务可能可用于其他任何事情,例如设置手动待办事项、定期提醒、未来的电子邮件/短信发送日期等......并且我正在查看每个日期时间可能有数千封时事通讯电子邮件等......
我研究了几个选项
1) Quartz.net / Hangfire / 后台任务
--> 既可以在 asp.net 中运行,也可以作为 Windows 服务运行。
--> 有计划任务/定期支持等...
--> 对我来说似乎过于复杂,如果与 asp.net 服务相结合,可能效率不高,没有那么可扩展,需要很好地设计它以供将来打样......需要设置额外的商店?
2) 任务调度器
--> 我的焦土/凤凰部署场景不太可行
3) 外部服务
--> Azure 调度程序
--> AWS Cloudwatch 调度程序/事件(也可以触发 SNS/Lambda 等...)
--> 似乎是一个很好的解耦解决方案,但维护/测试/持久性可能是个问题?需要根据解决方案正确设置...不知道如何获得“12 Factor's App”的产品/开发奇偶校验测试等...
4) 事件驱动消息总线
--> 巴士具有良好的耐用性和可靠性,但如果我想取消等会变得复杂......?
--> 未来计划的限制,就像我认为 SQS 只有 15 天限制或类似的东西。
5) 演员模型
--> Akka.net 或 Orleans,设置似乎很简单,还没用过,但似乎有很多符合要求的东西,执行特定任务的小演员,调度程序,高性能,易于添加集群对于更多工作(每个逻辑都是每个演员,其余是配置),易于在本地复制并且很好......单个工作单元演员对我来说很有意义。
--> 没有这方面的经验,但是对于我的场景来说会不会有点过分?对于一个成熟的调度程序来说,这似乎也是一个很好的未来证明。
--> 否定。尚无 dotnet 核心支持
欢迎任何其他建议...我需要在 2 周内完成。
PS 真的很想知道 Google Now Reminders 的架构是什么……这是一项很酷的服务“提醒我在某个时间做某事”,它就可以工作。