2012-01-12 79 views
2

我有一个生产者从twitter流中读取并将任务放置在使用rabbitmq作为消息代理的队列中。调度许多作业要通过时间戳执行

的工作通常需要3-5秒左右来执行,并在作业结束时,它是做我会通知用户。不过,我还想在他们的工作完成后的10分钟/ 30分钟/ 60分钟内通过向用户发送更多消息来提醒他们。

我找不出计划这些额外消息的最佳方式。我想创建cron作业来在这些特定的时间戳上运行消息脚本,但这似乎是一小时数千个作业的错误。另一个想法是运行一个守护进程,该守护进程将轮询数据库或从队列中读取,并在发送之前检查计划的时间戳和当前时间。

理想情况下,如果这可以通过延迟的消息在消息代理端完成,它会使它更清洁,但我读到RabbitMQ不支持这样的东西。

什么会着手安排许多工作需要由时间戳执行的最佳方法?

+0

cron工作似乎是我的正确选择。 – 2012-01-12 19:02:55

回答

1

只需创建一个运行的每一分钟,并检查其他队列,其时将要发送的消息时戳一个cron作业。当时间戳已过时,发送消息并从队列中删除项目。

+0

如果我想要更精细一点,会每隔几秒钟运行一次cron作业以检查是否过度?有没有比这更好的方法? – 2012-01-12 19:39:46

+0

嗯,首先,你不能每分钟运行一次以上的定时任务,除非你通过睡眠错开它们。您不必为每条消息安排一个cron作业 - 一次发送50条消息的脚本怎么样? – andrewtweber 2012-01-12 19:50:40