使用beanstalkd,对于周期性任务,如何总是让一个作业被最新的作业替换?
我正在尝试使用 beanstalk 对大量周期性数据进行排队 任务(例如,任务需要每 N 分钟处理一次),对于每个 任务,如果最后一个排队的作业未完成(我的意思是不保留) 当添加当前作业时,应替换最后一个排队的作业 与当前作业,换句话说,仅是任务的最新排队作业 应进行处理。
我怎样才能使用beanstalk来实现这一点?
我现在的想法是: 对于每个任务,使用 memcached 存储其最新时间戳(设置此 当将作业添加到队列时), 每次工作人员成功预订工作时,它都会首先检查 memcached 中此任务的时间戳, 如果作业的时间戳与 memcached 中的时间戳相同,则 处理这个工作, 否则跳过该作业,并将其从队列中删除。
那么有没有更好的方法来完成这样的工作呢?请提出您的建议, 谢谢。
I am trying to use beanstalk for queuing a large number of periodic
tasks (for example, tasks need processed every N minutes), for each
task, if the last queued job is not completed (not reserved, i mean)
when current job to be added, the last queued job should be replaced
with current job, in other words, only the latest queued job of a task
should be processed.
how can i achieve that using beanstalk?
Ideas i have got right now is:
for each task, use memcached store its latest timestamps (set this
when add jobs to queue),
every time the worker reserved a job successfully, it first checks
timestamps for this task in memcached,
if timestamps of the job is same as timestamps in memcached, then
process this job,
otherwise skip this job, and delete it from the queue.
So is there better ways to do such work? please give your suggestions,
thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我发现 memcache/beanstalk 组合也是实现的最佳解决方案,我不希望更新但相同的作业进入队列。
I found a memcache/beanstalk combination also the best solution for an implementation where I didnt want a newer but identical job entering a queue.
在“命名作业”完成并发布软件之前,这可能是其中之一更好的解决方案。
Until 'named jobs' are done and the software released, that may be one of the better solutions.