2

我需要创建一个推送通知服务(我通过 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 的架构是什么……这是一项很酷的服务“提醒我在某个时间做某事”,它就可以工作。

4

1 回答 1

3

您是否注意到 Orleans 有一个称为“提醒”(也称为“持久计时器”)的内置机制,这听起来正是您所要求的。

https://dotnet.github.io/orleans/docs/grains/timers_and_reminders.html

.NET Core 支持即将到来。

于 2016-10-12T05:03:58.350 回答