发送任务提醒

时间:2014-07-28 04:22:04

标签: scheduled-tasks rabbitmq scheduler amqp beanstalkd

我最近一直在考虑一个简单的任务提醒系统的可能架构。用户将安排任务和提醒,以SMS /电子邮件/机器人的形式需要在任务计划执行前的几分钟发送给所有利益相关者(与谷歌日历的工作方式大致相同)。这里的问题是在那个精确的时间点发送提醒。以下是我能想到的两种可行方法:

Cron :我可以设置一个每分钟运行一次的cron。这将扫描表格以获取需要在下一分钟发送的通知,并简单地发送通知。但是,精度会丢失,因为总有可能出现+/- 1分钟的错误。

工作队列:我可以在计划任务时将一条有适当延迟的消息放入队列中。工作人员将在收到通知时发送通知。我可以添加尽可能多的工作人员,以防我的实时行为因负载而开始受到影响。还有一些问题。如何选择合适的工作队列?我评估了RabbitMqBeanstalk。尽管Rabbitmq遵循标准AMQP协议并且被广泛推荐,但它并未提供开箱即用的delay功能。有一些方法可以使用dead-letter-exchanges来模拟这个,但这在我的情况下不起作用,因为延迟需要是可变的。 Beanstalk支持这个,但问题是beanstalk队列完全驻留在我不喜欢的内存中(但可以忍受)。任何可能的替代方案?

第三种方法:??????。我确信一个简单的桌面通知工具不会同时执行这两个工具。他们使用什么技术来实现同样的目标?

1 个答案:

答案 0 :(得分:0)

我们有相同的情况,我们使用Redis进行长时间安排甚至现在提醒长达2年。您可以使用时间戳为分数的Sorted Set

我们将Beanstalkd延迟作业用于那些我们知道相对短期几小时的提醒,并且没有取消,因为从bean中删除延迟消息,您需要保留作业ID数据库供以后删除,这是不可行的。

虽然你提到了内存限制,但我们在Redis / Beanstalkd

上都使用了持久性